VBAのInputでファイルからデータを読み取る方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Inputの概要

ファイルからデータを読み取る VBAの予約語

Input

概要 Input ステートメントは、VBAでファイルからデータを読み取るために使用されます。主に、テキストファイルやCSVファイルのデータを1行ずつ取得し、変数に格納する際に利用されます。

わかりやすく説明 ファイルからデータを1つずつ取り出し、変数に格納する命令。

  • ファイルからデータを1つずつ読み取るのに使用される。
  • データの区切り(カンマやスペース)を考慮して、値を変数に格納できる。
  • Excel VBAでテキストデータの処理やCSVの読み取りに活用できる。

Inputを使った基本的なファイル読み取り

以下の例では、テキストファイルからデータを読み取ります。

Sub ReadTextFile()
    Dim fileNum As Integer
    Dim myData As String

    ' ファイルを開く
    fileNum = FreeFile
    Open "C:\temp\data.txt" For Input As #fileNum

    ' 1行ずつ読み取る
    Do While Not EOF(fileNum)
        Input #fileNum, myData
        Debug.Print myData ' 読み取ったデータをイミディエイトウィンドウに表示
    Loop

    ' ファイルを閉じる
    Close #fileNum
End Sub

解説:

  • Open "C:\temp\data.txt" For Input As #fileNum: ファイルを読み取り専用モードで開く。
  • Do While Not EOF(fileNum): ファイルの終端(EOF)に達するまで繰り返す。
  • Input #fileNum, myData: 1行ずつデータを取得。
  • Close #fileNum: ファイルを閉じる。

CSVファイルを読み取る

以下の例では、CSVファイルのデータをセルに書き込みます。

Sub ReadCSVFile()
    Dim fileNum As Integer
    Dim myData As String
    Dim rowNum As Integer
    rowNum = 1

    ' ファイルを開く
    fileNum = FreeFile
    Open "C:\temp\data.csv" For Input As #fileNum

    ' 1行ずつ読み取る
    Do While Not EOF(fileNum)
        Input #fileNum, myData
        Cells(rowNum, 1).Value = myData ' A列にデータを書き込む
        rowNum = rowNum + 1
    Loop

    ' ファイルを閉じる
    Close #fileNum
End Sub

解説:

  • ファイルの内容をセルA1から順番に書き込む。
  • CSVデータを1行ずつ取得し、Excelに反映。

複数の値を取得する

以下の例では、CSVの各フィールド(カンマ区切り)を個別の変数に取得します。

Sub ReadCSVFields()
    Dim fileNum As Integer
    Dim name As String, age As Integer, city As String
    Dim rowNum As Integer
    rowNum = 1

    ' ファイルを開く
    fileNum = FreeFile
    Open "C:\temp\data.csv" For Input As #fileNum

    ' 1行ずつ読み取る
    Do While Not EOF(fileNum)
        Input #fileNum, name, age, city
        Cells(rowNum, 1).Value = name
        Cells(rowNum, 2).Value = age
        Cells(rowNum, 3).Value = city
        rowNum = rowNum + 1
    Loop

    ' ファイルを閉じる
    Close #fileNum
End Sub

解説:

  • ファイルの各フィールド(名前、年齢、都市)を個別の変数に取得。
  • セルA列に名前、B列に年齢、C列に都市を格納。

Excel VBAでのInputの活用

以下の例では、ExcelのセルA1にあるファイル名を読み取り、その内容をB列に表示します。

Sub ReadFileFromCell()
    Dim fileNum As Integer
    Dim filePath As String
    Dim myData As String
    Dim rowNum As Integer
    rowNum = 1

    ' A1セルからファイルパスを取得
    filePath = Range("A1").Value

    ' ファイルを開く
    fileNum = FreeFile
    Open filePath For Input As #fileNum

    ' 1行ずつ読み取る
    Do While Not EOF(fileNum)
        Input #fileNum, myData
        Cells(rowNum, 2).Value = myData ' B列にデータを書き込む
        rowNum = rowNum + 1
    Loop

    ' ファイルを閉じる
    Close #fileNum
End Sub

解説:

  • セルA1にファイルのパスを入力し、その内容をB列に表示。

Inputの注意事項

  • ファイルは適切に閉じる: Close を忘れると、ファイルがロックされる可能性がある。
  • データの型に注意: 読み取るデータの型と変数の型が一致していることを確認する。
  • 大きなファイルには適していない: Inputは1行ずつ処理するため、大量のデータには Line Input の方が適している。

よくある質問

Q: Input はどのようなファイルに使用できますか?
A: テキストファイル(.txt、.csv)などに適しています。バイナリファイルには適していません。
Q: Input では改行を考慮できますか?
A: いいえ。改行ごとにデータを取得する場合は Line Input を使用してください。
Q: Input でデータが途中で途切れることがありますが、なぜですか?
A: データ内にカンマがあると、区切り文字として認識され、複数の変数に分割されます。

まとめ

  • Input ステートメントは、ファイルからデータを読み取るために使用される。
  • テキストファイルやCSVデータを1行ずつ取得可能。
  • Excel VBAでのデータ処理や外部ファイルの読み取りに活用できる。
  • データの型やファイルの閉じ忘れに注意する必要がある。