ReadLine

2013年05月18日

【VBA】ファイルを1行ずつ読み込む

ファイルを1行ずつ読み込む方法は以下の2つがある。
  • 「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

続きを読む

PermalinkComments(0)