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

VBA

外部ファイルの読み込み


ファイルの存在チェック

カレントディレクトリに読み込み対象のファイル(input.txt)があるかメッセージボックスで表示する

Sub ExistCheck()

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

End Sub

外部ファイルの読み込みと転記

外部のテキストファイルを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ファイルを読み込んでセルに転記する

  • 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

転記結果のイメージ

A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
5 A5 B5 C5

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

読み込んだ外部ファイルの文字列を行単位でチェックする

  • 条件に合致したらメッセージボックスに表示する
    • 条件1:文字列 hoge を含む
    • 条件2: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

読み込んだ外部ファイルの特定の範囲のみを処理対象にする

  • 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
読み込み終了

VBA

Posted by junichi