Minerva Consulting AI & データエンジニア

業務の高速化・効率化の考え方と実装例

Excel テキストファイル読み込みを TextStream で劇的に高速化した

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
トップページへ