ReadLine
2013年05月18日
【VBA】ファイルを1行ずつ読み込む
ファイルを1行ずつ読み込む方法は以下の2つがある。
各方法でファイルを読み込んでみる。
まず、マクロがあるファイルと同階層に読み込みファイルを作成する。
※下記のマクロではファイルパスを同階層にしたため、このような階層にしている。
読み込むファイルパスさえ変更すれば、どこでもいい。
次に、「Book1.xlsm」に以下のマクロを書く。
≪「Line Input」を使用する方法≫
≪「ReadLine」を称する方法≫
≪readFileWithLineInput()とreadFileWithReadLine()の呼び出し≫
続きを読む
- 「Line Input」を使用する方法
- 「ReadLine」を称する方法
各方法でファイルを読み込んでみる。
まず、マクロがあるファイルと同階層に読み込みファイルを作成する。
Folder
|-Book1.xlsm ・・・下記のマクロがある
|-test.txt ・・・読み込まれるファイル
※下記のマクロではファイルパスを同階層にしたため、このような階層にしている。
読み込むファイルパスさえ変更すれば、どこでもいい。
次に、「Book1.xlsm」に以下のマクロを書く。
≪「Line Input」を使用する方法≫
' LineInputを使用してファイル内を一文ずつ読み込みCollectionに入れ、
' ファイルの内容を入れたCollectionを返す
' @param filePath 読み込みファイルパス
' @return ファイルの内容が入ったCollection
Private Function readFileWithLineInput(filePath As String) As Collection
' ファイルの内容を入れるCollection
Dim colResult As New Collection
' 読み込んだ1行を入れるString
Dim strLine As String
' ファイルを開く
Open filePath For Input As #1
' ファイルの最後までループ
Do Until EOF(1)
' 1行取得
Line Input #1, strLine
' 取得した一行をCollectionに入れる
colResult.Add strLine
Loop
Close #1
' return
Set readFileWithLineInput = colResult
End Function
≪「ReadLine」を称する方法≫
' ReadLineを使用してファイル内を一文ずつ読み込みCollectionに入れ、
' ファイルの内容を入れたCollectionを返す
' @param file 読み込みファイルパス
' @return ファイルの内容が入ったCollection
Private Function readFileWithReadLine(filePath As String) As Collection
' ファイルの内容を入れるCollection
Dim colResult As New Collection
' 読み込んだ1行を入れるString
Dim strLine As String
' ファイルを開くためのオブジェクト
Dim fso As Object, file As Object
' ファイル操作のオブジェクトを作成
Set fso = CreateObject("Scripting.FileSystemObject")
' 以下の状態でファイルを開く
' ・読み込み専用
' ・対象ファイルがない場合はエラーにする
' ・文字コード:SJIS
Set file = fso.OpenTextFile(filePath, 1, False, 0)
' ファイルの最後までループ
Do Until file.AtEndOfStream
' 1行取得
strLine = file.ReadLine
' 取得した一行をCollectionに入れる
colResult.Add strLine
Loop
' マナー
file.Close
Set file = Nothing
Set fso = Nothing
' return
Set readFileWithReadLine = colResult
End Function
≪readFileWithLineInput()とreadFileWithReadLine()の呼び出し≫
Sub Sample()
' 読み込みファイルパス
Dim readFile As String
' 読み込んだファイルの中身を入れるCollection
Dim colReadFile As Collection
' for eachでcollection(n)を入れるもの
Dim val As Variant
' 読み込みファイルパスを書く
readFile = ThisWorkbook.Path & "\test.txt"
' ファイルを読み込む(Line Input)を使用
Set colReadFile = readFileWithLineInput(readFile)
' [確認]ファイルの中身を1行ずつメッセージボックスで表示
For Each val In colReadFile
MsgBox val
Next
' colReadFileの中身を消す
Set colReadFile = Nothing
' ファイルを読み込む(ReadLine)を使用
Set colReadFile = readFileWithReadLine(readFile)
' [確認]ファイルの中身を1行ずつメッセージボックスで表示
For Each val In colReadFile
MsgBox val
Next
End Sub
続きを読む