Power Queryのクエリ、コネクション、出力テーブルの関係を整理する

Power Queryのクエリ、コネクション、出力テーブルの関係を整理する

Copyright © 2026 LWP 山中 一弘

本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。

記事要約

Power QueryでCSVを読み込んでExcelのテーブルへ出力すると、画面上では「クエリ」「接続」「テーブル」が一体のように見えます。しかし、VBAやオブジェクトモデルから見ると、この3つは別々のものです。この記事では、Togetter/Posfieに残っている調査メモと、取得できたVBE画面の画像をもとに、Power Queryの処理を「誰が誰を知っているか」という依存関係で整理します。

本記事の対象とゴール

対象は、Excelブック内でPower Queryを使い、CSVなどの外部データを読み込んでシート上のテーブルへ出力している人です。特に、VBAからPower Queryの接続先や出力先を調べたい人、WorkbookQuery、WorkbookConnection、ListObject、QueryTable の関係が曖昧な人を想定しています。

ゴールは、Power Queryの内部構造を次の3点で説明できるようにすることです。

  • クエリは、Power QueryのMコードを保持する定義である。

  • コネクションは、クエリ名を参照する接続情報である。

  • シート上のテーブルは、QueryTable.WorkbookConnection を経由してコネクションにつながる。

先に結論

Power Queryの出力テーブルを理解するときは、データの流れだけでなく、Excelオブジェクト同士の参照方向を分けて考える必要があります。

外部データ
  ↑ 読み込む
WorkbookQuery
  ↑ クエリ名を文字列として参照
WorkbookConnection
  ↑ QueryTable.WorkbookConnection が参照
ListObject(シート上のテーブル)

普段の感覚では、クエリがテーブルを作っているように見えます。しかし、VBAでたどると、テーブル側が QueryTable を持ち、その QueryTable が WorkbookConnection を参照しています。そして WorkbookConnection のOLE DB接続文字列の中に、どのクエリを使うかが文字列として入っています。

<!-- LWP_REWRITE_EXPANSION_記事117 -->

1. クエリと接続と出力を分ける

Power Queryを使うと、クエリ、接続、出力テーブルが同時に作られることがあります。この3つを同じものとして扱うと、後から管理しにくくなります。

クエリは変換手順です。接続はデータ取得の入口です。出力テーブルはExcelシート上に展開された結果です。それぞれ役割が違います。

2. 何を更新しているのかを見る

更新ボタンを押したとき、実際に更新されるのは接続であり、クエリの評価結果であり、必要に応じて出力テーブルです。どこで失敗しているのかを切り分けるには、この関係を分けて見る必要があります。

出力テーブルを削除してもクエリが残ることがあります。逆に、クエリを変更すると出力列が変わり、既存の数式や参照が壊れることがあります。

3. 実務ブックでの管理

実務では、クエリ名、接続名、出力テーブル名をそろえると保守しやすくなります。どのクエリがどのシートへ出ているか、どの接続が外部ファイルに依存しているかを説明できる状態にします。

Power Queryで混同しやすい3つのもの

クエリ

クエリは、Power Queryエディターで編集しているMコードの定義です。Excelのオブジェクトモデルでは ThisWorkbook.Queries の各要素、つまり WorkbookQuery として見えます。調査画像では、For Each e In ThisWorkbook.Queries でクエリ名やオブジェクト情報を出力していました。

ここで重要なのは、クエリは「どのようにデータを取り出し、加工するか」を持つ定義であって、シート上の表そのものではないという点です。

コネクション

コネクションは、ThisWorkbook.Connections にある接続情報です。調査画像では、各 WorkbookConnection について OLEDBConnection.Connection の内容を出力していました。そこには Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=クエリ名;... のような接続文字列が入ります。

つまり、コネクションはクエリオブジェクトを直接保持しているというより、接続文字列の中で「このクエリを使う」と名前で指定していると見るのが自然です。

出力テーブル

シート上の出力結果は ListObject です。テーブルには QueryTable があり、その QueryTable.WorkbookConnection からコネクションへ到達できます。調査画像では、For Each t In e.ListObjects でテーブルを走査し、Set qt = t.QueryTable、さらに qt.WorkbookConnection を出力していました。

このため、シート上のテーブルを入口にして接続元を調べる場合は、次の順でたどります。

ListObject
  -> QueryTable
  -> QueryTable.WorkbookConnection
  -> WorkbookConnection.OLEDBConnection.Connection
  -> Location=クエリ名
  -> WorkbookQuery

画像から読み取れる調査コードの意味

取得できた画像には、VBE上で次の3種類の情報を Debug.Print している様子が写っていました。

  • ThisWorkbook.Queries の一覧

  • ThisWorkbook.Connections の一覧と OLEDBConnection.Connection

  • 各シートの ListObjects と QueryTable.WorkbookConnection

画像内の出力には、クエリ名として クエリkojin2 や クエリkojin3 が見えます。また、接続文字列の Location= にクエリ名が入り、テーブル側の wconn に WorkbookConnection が表示されています。この観察から、Power Queryの出力は単純な1本線ではなく、クエリ定義、接続、出力テーブルの3層に分かれていることが分かります。

実務での見方

実務でPower Queryを使うだけなら、この構造を毎回意識する必要はありません。しかし、VBAで更新対象を制御したり、どのテーブルがどのクエリに接続しているかを棚卸ししたりする場合には、この構造理解が効きます。

例えば、ブック内に似た名前のクエリやテーブルが増えたとき、シート名やテーブル名だけで判断すると誤解します。確認すべきなのは、出力テーブルの QueryTable.WorkbookConnection がどの接続を指し、その接続文字列の Location がどのクエリ名を指しているかです。

まとめ

Power Queryの「クエリ」「コネクション」「出力テーブル」は、画面上ではまとめて扱われがちですが、Excel内部では役割が分かれています。クエリは処理定義、コネクションはクエリへの接続情報、テーブルは出力先です。この3つを分けて見ると、VBAからPower Queryの接続構造を調べるときに迷いにくくなります。

出典メモ- 元Togetter URL: https://togetter.com/li/1840176

  • 正規Posfie URL: https://posfie.com/@hoehoe1234/p/V04h5Ww

  • 取得日: 2026-06-12

  • 投稿者: ほえほえ@マクロ師のひとりごとDX @hoehoe1234 ほか、会話参加者

  • 素材として使った範囲: 投稿本文、投稿中の手順説明、リンク先として明示されている参考記事、取得できた画像の目視確認結果

  • 画像確認: X投稿画像のうち、VBEの調査コードと出力ログが写った画像を取得・目視確認した。本文では画像内のコード構造と出力内容を要約して再構成した。

  • 注意: 投稿本文は記事素材として要約・再構成し、長文転載ではなく、Power Query学習記事として補足説明を加えた。