ExcelでCSVファイルを読み込む際、ファイルを開いてコピー&ペーストするだけではなく、VBAのQueryTable機能を使うことで、自動化や柔軟な読み込み制御が可能になります。
本記事では、Excel VBAを使って、UTF-8形式のCSVファイルを指定したセル位置に読み込み、列ごとのデータ型も細かく制御する方法をご紹介いたします。
目次
処理の概要
- 対象CSVファイル:
import_data.csv
(UTF-8エンコード) - 読み込み位置:シート上の任意セル(ここでは
D3
セルを指定) - 区切り文字:カンマ
- 列の書式指定:文字列、日付、数値などを列ごとに定義
- 読み込み後にQueryTableを削除し、見た目をシンプルに保持
VBAコード:QueryTableを用いたCSVの読み込み処理
Sub ImportCSVWithQueryTable()
With ActiveSheet.QueryTables.Add( _
Connection:="TEXT;" & ThisWorkbook.Path & "\import_data.csv", _
Destination:=Range("D3") _
)
.AdjustColumnWidth = True
.TextFilePlatform = 65001 ' UTF-8
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = Array(1, 5, 2, 1, 2) ' 各列の書式設定
.Refresh BackgroundQuery:=False
.Delete ' クエリの痕跡を残さない
End With
End Sub
各パラメータの詳細
パラメータ名 | 内容・役割 |
---|---|
Connection | 読み込み対象のCSVファイルのパス |
Destination | データの書き込み開始セル(例:Range("D3") ) |
TextFilePlatform:=65001 | UTF-8文字コードを指定(文字化け防止) |
TextFileCommaDelimiter | カンマ区切りで読み込み |
TextFileColumnDataTypes | 各列の書式を定義(下表参照) |
Refresh | データの読み込み実行 |
Delete | 読み込み後にQueryTable自体を削除(見た目を維持) |
TextFileColumnDataTypes
の書式指定コード
数値 | 書式の種類 |
---|---|
1 | 一般(自動判定) |
2 | テキスト形式 |
5 | 日付(YMD) |
9 | 読み飛ばし |
実行結果のイメージ
D列 | E列(YMD) | F列(テキスト) | G列 | H列 |
---|---|---|---|---|
田中 | 2025/07/30 | TOKYO | 1234 | 備考 |
応用ポイント
- 区切り文字をタブにしたい場合は
.TextFileTabDelimiter = True
に変更可能です。 - 読み込み先を
Range("A1")
にすれば、既存シートの表形式に合わせた配置が可能です。 - QueryTableを削除しない設定にすれば、再読み込みボタンによる更新にも対応できます。
注意点
- 読み込み先の範囲に既存のデータがある場合は上書きされるため、十分に注意してください。
TextFileColumnDataTypes
の配列数が列数より少ない場合、余分な列は自動判定になります。.Delete
を省略すると、読み込み後もクエリの接続情報が残り、更新可能な状態になります。
まとめ
Excel VBAの QueryTables
を使えば、CSVファイルの読み込みを自在に制御し、手間のかかる整形作業を自動化できます。
列の形式や文字コード、配置場所まで細かく設定できるため、定型データの読み込みに最適です。
毎回同じCSVファイルを開いて処理している方は、この方法を導入することで作業効率が大きく向上することでしょう。