Excelで大量のテキストファイルを読み込む処理、
「時間がかかるものだから仕方ない」と思っていませんか?
実は、読み込み方法を少し変えるだけで、処理時間が“10分の1以下”になる ケースがあります。
この記事では、
Excel VBAでテキストファイルを読み込む際に
FileSystemObject の TextStream を使うことで、
4分かかっていた処理が、わずか0.4秒に短縮できた実例を紹介します。
特別なライブラリや難解なアルゴリズムは使っていません。
「VBAは詳しくないけれど、処理を速くしたい」
そんな方でも試せる、シンプルだけれど効果の大きい改善方法です。
・大量ログの取り込みが遅い
・CSV/テキスト処理で待ち時間が長い
・Excelが「固まる」のを何とかしたい
ひとつでも当てはまる方は、ぜひ読み進めてみてください。
Excel テキストファイル読み込みを TextStream で劇的に高速化した
条件:文字数 85万文字
before 4分 after 0.4秒
当初の1行処理 文字数 85万 で 4分
Public Function ReadTextFile(ByVal sFilePath As String, _
ByRef strResult As String, _
Optional blnVBCRLF As Boolean = False) As Boolean
Dim buf As String, Cnt As Long
On Error GoTo myErr
Cnt = 0
Open sFilePath For Input As #1'"C:\Work\Sample.txt"
Do Until EOF(1)'EOFまで1行ずつ転記する
Line Input #1, buf
If blnVBCRLF = True Then
strResult = strResult & buf & vbCrLf
Else
strResult = strResult & buf
End If
Cnt = Cnt + 1
If Cnt Mod 5000 = 0 Then
Sleep 25
DoEvents
Sleep 25
End If
Loop
Close #1'注意:Closeしないと 次回からOpen できない
MyExit:
ReadTextFile = True
Exit Function
myErr:
ReadTextFile = False
End Function
TextStream で読み込み 同条件 85万文字で0.4秒 !
Public Function ReadTextFileStream(ByVal sFilePath As String, _
ByRef strResult As String) As Boolean
Dim buf As String
With CreateObject("Scripting.FileSystemObject")
With .GetFile(sFilePath).OpenAsTextStream
buf = .ReadAll
.Close
End With
End With
MyExit:
strResult = buf
ReadTextFileStream = True
Exit Function
myErr:
ReadTextFileStream = False
End Function
トップページへ