はじめに
Excelでデータ集計を行う際、外部サーバになるCSVデータを読み込んで計算させたい場面は多くあると思います。しかしながら、手動でダウンロード・インポートするのは非常に手間です。
今回は、VBAのQueryTableを使用して、外部サーバのCSVを直接シートに取り込む方法を解説します。
作成コード
urlに取得したいCSVファイルのURLを指定することでデータを取得してシートに貼り付けます。URLの指定には文字列の先頭に「TEXT;」を付与します。このようにすることで、HTML解析ではなくテキストファイルとしてデータを取得できます。
Sub GetCSVQueryTable()
Dim url As String
Dim ws As Worksheet
Dim qt As QueryTable
' 設定:URL の先頭を "TEXT;" にするのが最大のポイント
url = "TEXT;https://example.com/data.csv" ' 実際のURLに書き換えてください
Set ws = ThisWorkbook.Sheets(1)
ws.Cells.Clear ' 既存データをクリア
' クエリテーブルの作成
Set qt = ws.QueryTables.Add(Connection:=url, Destination:=ws.Range("A1"))
On Error GoTo ErrorHandler
With qt
' --- テキストファイルとしての解析設定 ---
.TextFileParseType = xlDelimited ' 区切り記号付き
.TextFileCommaDelimiter = True ' カンマ区切り
.TextFilePlatform = 65001 ' 文字コード (UTF-8)
.TextFileStartRow = 1 ' 1行目から読み込み
' --- 更新と取り込み ---
.RefreshStyle = xlOverwriteCells ' セルを上書き
.Refresh BackgroundQuery:=False ' 取り込み完了まで待機
End With
' 後片付け(クエリ定義を削除し、データだけ残す)
qt.Delete
MsgBox "CSVの取り込みに成功しました!"
Exit Sub
' エラー処理
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
If Not qt Is Nothing Then qt.Delete
End Subプログラムの流れは以下の5ステップです。
- URLの指定: 接続文字列の先頭に
TEXT;を追加 - 出力先の準備:
Sheets(1).Cells.Clearでシートをきれいに掃除する - クエリ作成:
QueryTables.Addで「どこから・どこへ」データを持ってくるかを定義 - 詳細設定:
・xlDelimited: 記号で区切られたデータであることを指示
・TextFilePlatform: 文字化けを防ぐためにUTF-8(65001)を指定 - 接続の解除:
qt.Deleteを行わないと、Excelに接続情報が残ってしまうため、最後に取り込み機能だけを削除して「値」の状態にする
まとめ
QueryTableを使えば、数行のコードで「ダウンロード → 開く → コピペ → 閉じる」という一連の作業を自動化できます。特に、定期的に更新される外部データを扱う業務では非常に強力なツールになります。
ぜひご自身の環境に合わせて、URLや文字コードを調整して活用してみてください。


コメント