← コード一覧へ戻る
実務CSV

CSVデータをワークシートに読み込む(QueryTablesを使う場合)

UTF-8・カンマ区切りのCSVを、新規シートへ文字列として取り込みます。読み込み後は接続定義を削除し、値だけ残します。

実行前に確認

  • デスクトップExcel向けです。セル数上限内のCSVで試してください。全列を文字列にするため、数値計算には必要な列の変換が必要です。
  • DeleteはQueryTableという接続定義を削除する処理です。読み込んだセルや元CSVは削除しません。失敗した場合は途中の新規シートが残る場合があります。

1サンプルコード

Sub QueryTablesでCSVを読み込む()
    Dim ws As Worksheet, qt As QueryTable, filePath As String, formats() As Variant
    Dim i As Long, message As String
    filePath = "C:\Data\sample.csv"
    On Error GoTo Failed
    Set ws = ThisWorkbook.Worksheets.Add
    ReDim formats(1 To ws.Columns.Count)
    For i = 1 To UBound(formats)
        formats(i) = xlTextFormat
    Next i
    Set qt = ws.QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=ws.Range("A1"))
    With qt
        .TextFilePlatform = 65001
        .TextFileParseType = xlDelimited
        .TextFileCommaDelimiter = True
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = vbNullString
        .TextFileConsecutiveDelimiter = False
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileColumnDataTypes = formats
        .Refresh BackgroundQuery:=False
        .Delete
    End With
    Exit Sub
Failed:
    message = Err.Description
    On Error Resume Next
    If Not qt Is Nothing Then qt.Delete
    On Error GoTo 0
    MsgBox message
End Sub

図で見る操作の流れ

イメージ図

コードの動きを表した概念図です。実際のExcel画面ではありません。

  1. 入力:C:\Data\sample.csv

    UTF-8・カンマ区切り・二重引用符のCSV

  2. マクロ:新規シートへ読込み

    QueryTableでA1から列を分けて読み込む

  3. 読込み設定:全列を文字列に

    001などの先頭の0も文字として残す

  4. マクロ:接続定義を削除

    QueryTable.Deleteを実行する

  5. 結果:セルのデータは残る

    新規シートに読込済みデータが残り、元CSVも残る

Deleteは元CSVやセルの削除ではありません。失敗すると途中の新規シートが残る場合があります。数値計算には必要な列の変換が必要です。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。

  2. 2

    信頼できるUTF-8のsample.csvを用意し、filePathを書き換えます。区切りはカンマ、引用符は半角の二重引用符を想定します。

  3. 3

    実行するSubの内側にカーソルを置き、F5キーを押します。

  4. 4

    新規シートのA1から列に分けて読み込みます。001などの先頭の0も文字列として残ります。

使っている機能の公式ドキュメント(Microsoft Learn)