|
▼aya さん:
最初にお詫びですが、aya さんの作業するファイルは恐らく固定長ファイル
ではありません。固定長ファイルには行という概念はありません。
1レコード(サイズ)で管理します。従って、1行ずつ読込むと
言うことはできません。
私の頭から抜けていたので、aya さんの説明とソースが違うと言うことに
気が付きませんでした。
>これを実現できたらなとは思っていますが、どうすればいいかわかりません。
お詫びに手持ちの関数をUPしときます。
Public Function ReadFile(psPath As String) As String
'//////////////////////////////////////////////////////
'ReadFile:該当するファイルのText全てを返す
'-------------------------------------
'引数
'psPath :読み込むファイルのフルパス
'-------------------------------------
'戻り値:該当するファイルのText全てを返す。失敗時 "" を返す
'//////////////////////////////////////////////////////
Dim fnum As Long
Dim sPath As String
Dim sData As String
Dim fSize As Long
Dim bytBuf() As Byte
On Error GoTo ErrorHandler
sPath = psPath
fSize = FileLen(sPath)
ReDim bytBuf(fSize)
fnum = FreeFile()
Open sPath For Binary As #fnum
Get #fnum, , bytBuf()
Close #fnum
sData = StrConv(bytBuf, vbUnicode)
Erase bytBuf
sData = Left(sData, InStr(1, sData, Chr(0)) - 1)
ReadFile = sData
Exit Function
ErrorHandler:
Close
ReadFile = ""
End Function
使い方
固定長ではなさそうなので改行毎に1行ずつに分解してます。
恐らくカンマ区切りのCSV形式では?
Sub t()
Dim sText As String
Dim sDatas() As String
'sText に全てのテキストが返ってきます
sText = ReadFile("D:\hoge\hoge.txt")
'sDatas()に1行ごとに分割されます。
sDatas = Split(sText, vbCrLf)
End Sub
>配列に1行ずつ読み込んで、その後処理をさせるという意味でしょうか?
そうです。どうもカンマ区切りファイルのようですから、上の使い方のsDatas
の配列をそれぞれカンマ毎にもう一度分解したら、処理がやりやすくなる
(判断回数が減る)のではないですか?分解と言う処理は増えますけど。
>1行の中には不必要なデータがたくさんありすぎて、処理が複雑になってしまっているのが現状です。
>その処理をした後また配列に値を入れて、最後にセルに書き込みという処理を行う方が速いのでしょうか?
おそらくそう思います。
処理後、ぺたぺたとセルに貼り付けていくといいと思います。
但し、セルへのアクセスは最小限にしなければ効果は薄いです。
この辺はJakaさんのやり方を参考にしてください。
|
|