テキストファイルの読み込み方法

テキストファイルを読み込むには Open ステートメントに Input モードを指定します。データを読み込むステートメントには Line Input # と Input # の2つあります。

Input # ステートメントは使用するための条件がいくつかあり、使用場面が限られてきますので、
最初は Line Input # ステートメントを使用する方法を覚えましょう。

スポンサーリンク

使用方法

Openステートメント(Inputモード)

ファイルを開くときに使用するステートメントです。FileNumber は、予め FreeFile 関数を使用して次に使用可能なファイル番号を取得しておく必要があります。

構文
Open PathName For Input [Lock] As #FileNumber
引数名 省略 説明
PathName × 文字列式にはファイル名を指定します。 フォルダ名、またはドライブ名も含めて指定できます。
Lock 開くファイルに対する、他のプロセスからのアクセスを制御する、次のいずれかのキーワードを指定します。

Shared
Lock Read
Lock Write
Lock Read Write
FileNumber × 1 ~ 511 の範囲で任意のファイル番号を指定します。 予め FreeFile 関数 を使用して次に使用可能なファイル番号を取得しておいてください。

Line Input # ステートメント

ファイルを1行ずつ読み込むときに使用するステートメントです。

構文
Line Input #FileNumber, VarName
引数名 省略 説明
FileNumber × ファイルをオープンする際に指定したファイル番号を指定します。
VarName × ファイルから読み込んだデータを格納するための変数を バリアント型 (Variant) または文字列型 (String) で指定します。

Input # ステートメント

CSVファイルなど、カンマ区切りのファイルを読み込むときに使用するステートメントです。

構文
Input #FileNumber, VarName1 [, VarName2 …]
引数名 省略 説明
FileNumber × ファイルをオープンする際に指定したファイル番号を指定します。
VarName1 × ファイルから読み込んだデータを格納するための変数を、1 つまたは複数指定します。 複数指定するときは、カンマで区切って指定します。 各変数のデータ型は読み込むデータ項目に合わせておく必要があります。 入力データのダブルクォーテーションは自動的に除去されます。
VarName2…

Closeステートメント

ファイルを閉じるときに使用するステートメントです。

構文
Close [#FileNumber1] [, #FileNumber2 …]
引数名 省略 説明
FileNumber1… ファイルをオープンする際に指定したファイル番号を指定します。 カンマで区切って複数指定することができます。 省略した場合は、Open ステートメントで開いたすべてのファイルが閉じられます。

使用例

テキストファイル(CSV形式)を1行ずつ読み込む(その1)

Line Input # ステートメントを使用し、CSV形式のファイルを1行ずつ読み込んでそのデータをシートに表示する例です。

Sub sample_eb092_01()
    Dim myPath          As String
    Dim FileNumber      As Integer
    Dim textLine        As String
    Dim var             As Variant
    Dim myRow           As Long
    Dim i               As Integer

    'このマクロが組み込まれたエクセルファイルと
    '同じフォルダにある"test_input1.csv"を入力ファイルとします。
    myPath = ThisWorkbook.Path & "¥test_input1.csv"
    '編集開始行
    myRow = 1

    '空いているファイル番号を取得します。
    FileNumber = FreeFile
    '入力ファイルをInputモードで開きます。
    Open myPath For Input As #FileNumber

    Do While Not EOF(FileNumber)
        'ファイルから1行読み込みます。
        Line Input #FileNumber, textLine
        '読み込んだ文字列をカンマで区切ります。
        var = Split(textLine, ",")

        With ThisWorkbook.Worksheets(1)
            For i = 0 To UBound(var)
                If myRow > 1 And i = 0 Then
                    '[ID]は前ゼロを表示するように表示形式を変更
                    .Cells(myRow, i + 1).NumberFormatLocal = "@"
                End If

                '値の編集
                .Cells(myRow, i + 1).Value = var(i)
            Next i
        End With

        '編集行を加算します。
        myRow = myRow + 1
    Loop

    '入力ファイルを閉じます。
    Close #FileNumber
End Sub

 ワークブックの名前とパス セルの表示形式 FreeFile関数  Split関数
 LBound,UBound関数  For…Next Do…Loop Withステートメント

テスト用の入力ファイル(CSVファイル)です。

入力ファイル(CSV形式)
入力ファイル(CSV形式)

上記サンプルマクロを実行すると、入力ファイルを読み込み、そのデータをシートに表示します。

sample_eb092_01実行結果
sample_eb092_01実行結果

テキストファイル(CSV形式)を1行ずつ読み込む(その2)

Input # ステートメントを使用し、前述サンプルと同じくCSV形式のファイルを読み込んでシートに表示する例です。Input # ステートメントを使用してデータを読み込むには、入力ファイルが以下の条件を満たしている必要があります。

  • 各データ項目がカンマにより区切られている
  • 各行におけるデータ項目の数(カンマの数)が決まっている
  • 空白行があってはならない(カンマのみはOK)

※Input # ステートメントを使用するとデータ項目がダブルクォーテーションで括られていても、ダブルクォーテーションは自動的に除去されます。

Sub sample_eb092_02()
    Dim myPath          As String
    Dim FileNumber      As Integer
    Dim strTitle(1 To 3) As String
    Dim strID           As String
    Dim strItem         As String
    Dim lngPrice        As Long
    Dim myRow           As Long
    Dim i               As Integer

    'このマクロが組み込まれたエクセルファイルと
    '同じフォルダにある"test_input1.csv"を入力ファイルとします。
    myPath = ThisWorkbook.Path & "\test_input1.csv"
    '編集開始行
    myRow = 1

    '空いているファイル番号を取得します。
    FileNumber = FreeFile
    '入力ファイルをInputモードで開きます。
    Open myPath For Input As #FileNumber

    '先頭行(タイトル)を読み込みます。
    Input #FileNumber, strTitle(1), strTitle(2), strTitle(3)
    'タイトルをワークシートへ編集します。
    With ThisWorkbook.Worksheets("Sheet1")
        For i = 1 To 3
            .Cells(myRow, i).Value = strTitle(i)
        Next i
    End With
    myRow = myRow + 1

    Do While Not EOF(FileNumber)
        'ファイルから1行読み込みます。
        Input #FileNumber, strID, strItem, lngPrice

        With ThisWorkbook.Worksheets(1)
            '値の編集
            With .Cells(myRow, 1)
                .NumberFormatLocal = "@"
                .Value = strID
            End With
            .Cells(myRow, 2).Value = strItem
            .Cells(myRow, 3).Value = lngPrice
        End With

        '編集行を加算します。
        myRow = myRow + 1
    Loop

    '入力ファイルを閉じます。
    Close #FileNumber
End Sub

 ワークブックの名前とパス セルの表示形式 FreeFile関数 
 For…Next Do…Loop Withステートメント

実行結果は上記 sample_eb092_01 の結果と同じになります。

 入力ファイルの数値を2倍して出力ファイルへ書き出す

タイトルとURLをコピーしました