OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:648
区分:プログラム  |  分類:VB  |  最終更新日:2014/12/15
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB6/VBA】csvファイルを読み込む
関連タグ:vb6, vba, ファイル入出力
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 30,655
VB6関連技術まとめ > 【VB6/VBA】csvファイルを読み込む

VB6/VBA で csv ファイルを読み込む方法はいくつかあります。

 

 

なお、検証で使用する csv ファイルは以下内容にて作成されていると仮定します。

 

【検証用 csv ファイル内容】

"名前","住所","電話番号"
"てすと太郎","東京都港区XX-XX-XX","111-1111-1111"
"てすと次郎","埼玉県さいたま市XX-XX-XX","222-2222-2222"
"てすと三郎","神奈川県横浜市XX-XX-XX","333-3333-3333"

Openステートメントでファイルを開いて読み込む

Open ステートメントでファイルを開いて読み書きする場合は、まず Open ステートメントでテキストファイルを開き、Input # ステートメントでテキストを一行ずつ項目ごとに読み込み、最後に Close ステートメントでファイルを閉じるといった処理を行います。

 

【サンプルコード1】

Public Sub sample1()
    Dim intNo As Integer        'ファイルNo
    Dim lngCount As Long        'データ数
    Dim strItem1() As String    '項目1用配列
    Dim strItem2() As String    '項目2用配列
    Dim strItem3() As String    '項目3用配列

    'csvファイルオープン
    intNo = FileSystem.FreeFile()
    Open "C:\tmp\sample.csv" For Input As #intNo

    'csvファイルの読み込み
    lngCount = 0
    Do Until EOF(intNo)

        '配列のリサイズ
        ReDim Preserve strItem1(lngCount) As String
        ReDim Preserve strItem2(lngCount) As String
        ReDim Preserve strItem3(lngCount) As String

        'データを各配列に読み込み
        Input #intNo, strItem1(lngCount), strItem2(lngCount), strItem3(lngCount)

        lngCount = lngCount + 1
    Loop

    'csvファイルクローズ
    Close #intNo

    '読み込んだ値を確認
    Dim i As Long
    For i = 0 To UBound(strItem1)
        Debug.Print strItem1(i), strItem2(i), strItem3(i)
    Next i

End Sub

 

上記サンプルは「C:\tmp\sample.csv」を読み込み、配列に格納後、読み込んだデータをデバッグ表示しています。今回のサンプルではcsvの項目数が 3 つであるため、配列も 3 つ用意していますが、csv の項目数に応じて配列数は増減します。

FileSystemObjectで読み込む

FileSystemObject を使用して csv ファイルを読み込む場合は、まず FileSystemObject のインスタンスを生成し、そのインスタンスの OpenTextFile メソッドで csv ファイルを TextStream としてオープンします。TextStream は AtEndOfStream プロパティでファイルの終わりを検知し、ReadLine メソッドで一行ずつテキストを読み込みます。

 

【条件】

  • 「Microsoft Scripting Runtime」を参照設定する必要がある。(scrrun.dllが必要)

 

【サンプルコード2】

Public Sub sample2()
    Dim intNo As Integer        'ファイルNo
    Dim lngCount As Long        'データ数
    Dim tmpData() As String     '一時保存用配列
    Dim strItem1() As String    '項目1用配列
    Dim strItem2() As String    '項目2用配列
    Dim strItem3() As String    '項目3用配列
    Dim fso As New FileSystemObject
    Dim ts As TextStream

    'ファイルオープン
    Set ts = fso.OpenTextFile("C:\tmp\sample.csv")

    'ファイル読み込み
    lngCount = 0
    With ts
        Do Until .AtEndOfStream

            '配列のリサイズ
            ReDim Preserve strItem1(lngCount) As String
            ReDim Preserve strItem2(lngCount) As String
            ReDim Preserve strItem3(lngCount) As String

            '一行データを読み込み、カンマ区切りで配列に変換
            tmpData = Split(.ReadLine, ",")

            '読み込んだデータの前後の「"」を削除して配列に格納
            strItem1(lngCount) = Mid(tmpData(0), 2, Len(tmpData(0)) - 2)
            strItem2(lngCount) = Mid(tmpData(1), 2, Len(tmpData(1)) - 2)
            strItem3(lngCount) = Mid(tmpData(2), 2, Len(tmpData(2)) - 2)

            lngCount = lngCount + 1
        Loop

    End With

    'ファイルクローズ
    ts.Close
    Set ts = Nothing

    '読み込んだ値を確認
    Dim i As Long
    For i = 0 To UBound(strItem1)
        Debug.Print strItem1(i), strItem2(i), strItem3(i)
    Next i

End Sub

 

上記サンプルは「C:\tmp\sample.csv」を読み込み、読み込んだデータをデバッグ表示しています。ReadLine メソッドで読み込んだ一行テキストを、Split 関数でカンマ区切りの配列に変換し、その後、各項目の前後に付加されてるダブルクォーテーションを削除しています。

 

【注意事項】

上記例では Split 関数でカンマ区切りでデータを切り出していますが、文字列の中にカンマが含まれていた場合正しく動作しません。ダブルクォーテーションで囲われた文字列内のカンマを許可する場合は、自前で解析関数を実装する必要があります。

関連記事
外部リンク
外部リンクはありません。
- 記事検索 -