【ExcelVBA】外部サーバからCSVを自動取得しよう

スポンサーリンク

はじめに

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ステップです。

  1. URLの指定: 接続文字列の先頭に TEXT; を追加
  2. 出力先の準備: Sheets(1).Cells.Clear でシートをきれいに掃除する
  3. クエリ作成: QueryTables.Add で「どこから・どこへ」データを持ってくるかを定義
  4. 詳細設定:
    xlDelimited: 記号で区切られたデータであることを指示
    TextFilePlatform: 文字化けを防ぐためにUTF-8(65001)を指定
  5. 接続の解除: qt.Delete を行わないと、Excelに接続情報が残ってしまうため、最後に取り込み機能だけを削除して「値」の状態にする

まとめ

QueryTableを使えば、数行のコードで「ダウンロード → 開く → コピペ → 閉じる」という一連の作業を自動化できます。特に、定期的に更新される外部データを扱う業務では非常に強力なツールになります。

ぜひご自身の環境に合わせて、URLや文字コードを調整して活用してみてください。

コメント

タイトルとURLをコピーしました