【VBA】外部ファイルの参照と読み込み

Excel,VBA

VBAで外部ファイルを読み込む処理の手順です。

記載内容 ①ファイルの存在チェック
②ファイルの読み込みと転記
③CSVファイルの読み込みと転記
④外部ファイルの読み込み時のチェック
⑤外部ファイルの処理対象範囲指定

①ファイルの存在チェック

読み込もうとするファイルが存在するかを事前にチェックします。
下記のコードは、カレントディレクトリに読み込み対象のファイル(input.txt)があるかメッセージボックスで表示します。

Sub ExistCheck()

    If Dir(ThisWorkbook.Path & "\input.txt") <> "" Then
        MsgBox ("ファイルが存在します")
    Else
        MsgBox ("ファイルが存在しません")
    End If

End Sub

②ファイルの読み込みと転記

外部ファイル input.txt を1行ずつ読み込んでセルに転記します。

Sub ReadText()

    Dim buf As String
    Dim i As Long

    Open ThisWorkbook.Path & "\input.txt" For Input As #1

        Do Until EOF(1)
            Line Input #1, buf
            ' 読み込んだ内容をメッセージボックスに表示する場合コメントインする
            ' MsgBox buf
            i = i + 1
            Cells(i, 1) = buf
        Loop

    Close #1

End Sub

③CSVファイルの読み込みと転記

外部ファイル input.csv を読み込んで列ごとにセルに転記します。

Split で読み込んだ行の "," の位置で分割します。

タブ区切りのファイルの場合は vbTab を指定します。

Sub ReadCsv()

    Dim buf As String
    Dim i As Long

    ' buf をカンマ区切りで格納するための配列
    Dim part

    Open ThisWorkbook.Path & "\input.csv" For Input As #1

        i = 1

        Do Until EOF(1)
            Line Input #1, buf
            part = Split(buf, ",")

            Cells(i, 1) = part(0)
            Cells(i, 2) = part(1)
            Cells(i, 3) = part(2)

            i = i + 1
        Loop

      Close #1

End Sub

input.csvの中身

A1,B1,C1
A2,B2,C2
A3,B3,C3
A4,B4,C4
A5,B5,C5

④外部ファイルの読み込み時のチェック

読み込んだファイルの内容を行単位でチェックします。
条件に合致したらメッセージボックスで表示します。

条件は以下のとおりです。

  • 文字列 hoge を含む
  • 3文字目から4文字が hoge
Sub ReadTextCheck()

    Dim buf As String

    Open ThisWorkbook.Path & "\input.txt" For Input As #1

        Do Until EOF(1)
            Line Input #1, buf
            If InStr(buf, "hoge") <> 0 Then
                MsgBox buf
            End If

            If Mid(buf, 3, 4) = "hoge" Then
                MsgBox buf
            End If
        Loop

    Close #1

End Sub

⑤外部ファイルの特定の範囲だけ処理対象にする

対象ファイルの一部だけを処理します。

次のコードは下記 input.txtの start 行から end 行をメッセージボックスで表示します。

Sub ReadingRange()

    Dim buf As String
    Dim i As Long
    Dim InFlg As Boolean

    Open ThisWorkbook.Path & "\input.txt" For Input As #1

        Do Until EOF(1)
            Line Input #1, buf

            If InStr(buf, "start") <> 0 Then
                InFlg = True
                MsgBox ("読み込み開始")
            End If

            If InFlg = True Then
                i = i + 1
                MsgBox (buf)
            End If

            If InStr(buf, "end") <> 0 Then
                InFlg = False
                MsgBox ("読み込み終了")
            End If
        Loop

    Close #1

End Sub

input.txtの中身

111
222
333
start
444
555
666
end
777
888
999

【実行結果】以下がメッセージボックスで表示されます。

読み込み開始
start
444
555
666
end
読み込み終了

参考書

Excel,VBA

Posted by junichi