この記事では、Excel VBA(Visual Basic for Applications)を用いてテキストファイルを読み込む方法について、基本から応用まで解説します。特に、プログラムのサンプルコードを多数掲載し、それぞれのコードがどのような目的で使われるのか、どのような処理を行っているのかを説明します。
基本的な読み込み方法
Line Inputステートメントの使用
VBAでテキストファイルから1行ずつ読み込む最も基本的な方法は、Line Inputステートメントを使用することです。
サンプルコード1:基本的な1行読み込み
Sub ReadSingleLine()
Dim textData As String
Open "D:\Example\TextFile.txt" For Input As #2
Line Input #2, textData
MsgBox textData
Close #2
End Sub
処理の流れ
Dim textData As Stringで、読み込んだテキストを一時的に格納する変数textDataを宣言します。Open "D:\Example\TextFile.txt" For Input As #2で、読み込むテキストファイルを指定します。Line Input #2, textDataで、テキストファイルから1行読み込み、それをtextDataに格納します。MsgBox textDataで、読み込んだテキストをメッセージボックスで表示します。Close #2で、ファイルを閉じます。

EOF関数での読み込み制御
ファイルの終端に達したかどうかを判定するためには、EOF(End Of File)関数を使用します。
サンプルコード2:EOF関数を用いた全行読み込み
Sub ReadAllLines()
Dim textData As String
Open "D:\Example\TextFile.txt" For Input As #2
Do Until EOF(2)
Line Input #2, textData
Debug.Print textData
Loop
Close #2
End Sub
処理の流れ
Dim textData As Stringで、読み込んだテキストを一時的に格納する変数textDataを宣言します。Open "D:\Example\TextFile.txt" For Input As #2で、読み込むテキストファイルを指定します。Do Until EOF(2)とLoopで、ファイルの終端に達するまでループします。- ループ内の
Line Input #2, textDataで、テキストファイルから1行ずつ読み込み、それをtextDataに格納します。 Debug.Print textDataで、読み込んだテキストをデバッグウィンドウに表示します。Close #2で、ファイルを閉じます。

高度な読み込み方法
FileSystemObjectの使用
FileSystemObjectを使用すると、テキストファイルを一気に読み込むことができます。この方法は、ファイルサイズが小さく、一度に全てのデータを読み込みたい場合に便利です。
サンプルコード3:FileSystemObjectを用いた一括読み込み
Sub BulkRead()
Dim allText As String
With CreateObject("Scripting.FileSystemObject")
With .GetFile("D:\Example\TextFile.txt").OpenAsTextStream
allText = .ReadAll
.Close
End With
End With
Range("A1") = allText
End Sub
処理の流れ
Dim allText As Stringで、読み込んだテキストを一時的に格納する変数allTextを宣言します。With CreateObject("Scripting.FileSystemObject")で、FileSystemObjectを生成します。.GetFile("D:\Example\TextFile.txt").OpenAsTextStreamで、読み込むテキストファイルを指定します。allText = .ReadAllで、テキストファイルの全内容を一気に読み込み、それをallTextに格納します。.Closeで、ファイルを閉じます。Range("A1") = allTextで、読み込んだテキストをA1セルに表示します。

改行でのデータ分割
一気に読み込んだデータを改行ごとに分割する方法もあります。この方法は、大量のデータを一度に読み込んだ後、行ごとに処理を行いたい場合に便利です。
サンプルコード4:改行でデータを分割
Sub SplitByNewLine()
Dim allText As String, textArray As Variant, i As Long
With CreateObject("Scripting.FileSystemObject")
With .GetFile("D:\Example\TextFile.txt").OpenAsTextStream
allText = .ReadAll
.Close
End With
End With
textArray = Split(allText, vbCrLf)
For i = 0 To UBound(textArray)
Cells(i + 1, 1) = textArray(i)
Next i
End Sub
処理の流れ
Dim allText As String, textArray As Variant, i As Longで、必要な変数を宣言します。With CreateObject("Scripting.FileSystemObject")で、FileSystemObjectを生成します。.GetFile("D:\Example\TextFile.txt").OpenAsTextStreamで、読み込むテキストファイルを指定します。allText = .ReadAllで、テキストファイルの全内容を一気に読み込み、それをallTextに格納します。.Closeで、ファイルを閉じます。textArray = Split(allText, vbCrLf)で、読み込んだテキストを改行で分割し、それをtextArray配列に格納します。For i = 0 To UBound(textArray)とNext iで、textArray配列の全要素に対してループ処理を行います。Cells(i + 1, 1) = textArray(i)で、分割したテキストを各行に表示します。

FAQ
Q:VBAでテキストファイルを読み込む基本的な方法は何ですか?
A:VBAでテキストファイルを読み込む基本的な方法は、Openステートメントでファイルを開き、Line Inputステートメントで1行ずつ読み込む方法です。この方法は非常にシンプルで、初心者にも理解しやすいです。
Q:EOF関数は何に使いますか?
A:EOF(End Of File)関数は、テキストファイルの終端に達したかどうかを判定するために使用します。この関数を使うことで、ファイルの最後まで読み込みを行うループ処理が可能になります。
Q:FileSystemObjectとは何ですか?
A:FileSystemObjectは、ファイルやフォルダに関する操作を行うためのオブジェクトです。テキストファイルを一気に読み込む場合や、ファイルの属性を取得する場合などに使用します。
Q:テキストファイルを一行ずつ読み込む場合と一括で読み込む場合、どちらがいいですか?
A:一行ずつ読み込む方法は、大量のデータが含まれるテキストファイルを扱う場合にメモリを節約できます。一括で読み込む方法は、ファイルサイズが小さく、高速な処理が求められる場合に有用です。用途に応じて選択してください。
Q:テキストファイルから読み込んだデータをExcelのセルに出力する方法は?
A:Rangeオブジェクトを使用して、読み込んだデータを指定したセルに出力することができます。例えば、Range("A1").Value = 読み込んだデータといった形で使用します。
Q:テキストファイルが存在しない場合、どうすればいいですか?
A:Dir関数を使用して、テキストファイルが存在するかどうかを事前に確認することができます。存在しない場合は、エラーメッセージを表示するなどの処理を追加するとよいでしょう。
Q:テキストファイルのエンコーディングについてはどう扱いますか?
A:VBAの標準機能では、エンコーディングの指定は限定的です。特定のエンコーディングを指定して読み込む必要がある場合は、ADODB.Streamオブジェクトを使用する方法があります。
Q:改行コードはどう扱いますか?
A:VBAでは、vbCrLf、vbCr、vbLfなどの定数を使用して改行コードを扱います。特にSplit関数と組み合わせることで、改行コードを基にテキストデータを分割することが可能です。
Q:テキストファイルの読み込みでエラーが発生した場合、どうすればいいですか?
A:On Errorステートメントを使用して、エラーが発生した場合の処理を記述することができます。具体的には、エラーが発生した場合にエラーメッセージを表示する、ログファイルに出力するなどの処理を行います。
関連動画
まとめ
VBAでテキストファイルを読み込む方法は多く、その用途や状況に応じて最適な方法があります。この記事で紹介した各サンプルコードとその処理の流れを理解し、自分のタスクに適したコードを採用してください。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome
