Excel VBA で Power Query を自動登録する方法

Power Query を VBA から追加すると、CSV やテキストファイルの読み込みをワンクリックで再実行できるようになり、日々のデータ更新が簡素化されます。本記事では WorkbookQuery オブジェクト を利用し、CSV データ接続を登録するサンプルコードとポイントを解説いたします。


目次

使用環境

項目内容
ExcelMicrosoft 365 / 2019 / 2016
言語VBA(Visual Basic for Applications)
対象ファイルsales_data_utf8.csv(UTF‑8 形式)

サンプルコード

Sub AddPowerQueryConnection()
    
    Dim csvPath  As String    ' 読み込む CSV ファイルのフルパス
    Dim mCode    As String    ' Power Query (M 言語) のコード
    
    ' ファイルパスを組み立て
    csvPath = ThisWorkbook.Path & "\sales_data_utf8.csv"
    
    ' **********  Power Query (M) コード  **********
    mCode = "let" & vbCrLf & _
            "    Source = Csv.Document(" & _
            "File.Contents(""" & csvPath & """)," & _
            "[""Delimiter"","",""," & _
            """Encoding"",""65001""])" & vbCrLf & _
            "in" & vbCrLf & _
            "    Source"
    ' **********************************************
    
    ' 既存クエリと重複しないよう、存在チェック
    Dim qryName As String: qryName = "PQ_CSVImport"
    Dim qry     As WorkbookQuery
    
    On Error Resume Next
    Set qry = ThisWorkbook.Queries(qryName)
    On Error GoTo 0
    
    If qry Is Nothing Then
        ' クエリが存在しない場合は新規追加
        ThisWorkbook.Queries.Add Name:=qryName, Formula:=mCode
    Else
        ' 存在する場合は上書き更新
        qry.Formula = mCode
    End If
    
    MsgBox "Power Query の登録が完了しました。", vbInformation
    
End Sub

コード解説

項目説明
Csv.DocumentDelimiterEncoding=65001(UTF‑8)を指定し、文字化けを防ぎます。
WorkbookQueryThisWorkbook.Queries.Add でクエリを新規登録、Formula で上書き更新が可能です。
重複チェック既存クエリ名と重複する場合、上書きすることで管理を簡素化します。

応用アイデア

要件実装例
別シートへテーブルとして読み込みActiveWorkbook.Connections.Add2ListObject.QueryTable を組み合わせます。
区切り文字や列型を動的変更DelimiterColumns の定義部分を文字列操作で置換します。
複数ファイルの一括登録ファイル名を配列管理し、For Each でクエリ名を変えてループ追加します。

まとめ

  • WorkbookQuery を使用すると、Power Query の M コードを VBA から直接挿入・更新できます。
  • CSV など外部データの再読込がボタン 1 つで完結し、月次・週次レポートの更新が効率化します。
  • 既存クエリ名を先に確認してから追加・上書きすると、ブック内のクエリ管理が容易です。

Power Query と VBA を組み合わせ、手作業のデータ更新を自動化してみてはいかがでしょうか。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次