アクセス上位ページ
 
最近の更新内容

Excel VBA ≫ 1.基礎編 - テキストファイル入出力(9)-b.テキストファイル読込

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

テキストファイルを読み込むには Open ステートメントに Input モードを指定します。 データを読み込むステートメントには Line Input #Input # の2つあります。 Input # ステートメントは使用するための条件がいくつかあり、使用場面が限られてきますので、 最初は Line Input # ステートメントを使用する方法を覚えましょう。



    <ファイルを開く>
  • 【構文】
    Open PathName For Input [Lock] As #FileNumber

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

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


    <ファイルを読み込む@>
  • 【構文】
    Line Input #FileNumber, VarName

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


    <ファイルを読み込むA>
  • 【構文】
    Input #FileNumber, VarName1 [, VarName2 …]

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


    <ファイルを閉じる>
  • 【構文】
    Close [#FileNumber1] [, #FileNumber2 …]

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

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

    Line Input # ステートメントで読み込んだ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
    

    <入力ファイル(CSV形式)> 入力ファイル(CSV形式) <sample_eb092_01 実行結果> sample_eb092_01実行結果
  • テキストファイルの読み込み例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
    

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

カテゴリ内ページ



Page
Top