PowerQuery(パワークエリ)で作成したクエリをVBAマクロで実行する方法ついて紹介します。
マクロでクエリを更新する方法は下記の2つあります。それぞれの使い方を紹介してますので参考にしてみてください。
- すべてのクエリを更新(RefreshAll)
- 一部のクエリを更新(Refresh)
全てのクエリを更新する
全クエリ実行用のVBAマクロ
開いているファイルの全てのクエリを実行する場合は、下記のマクロを実行します。
Sub test()
ActiveWorkbook.RefreshAll
End Sub
マクロによる全クエリ更新手順
VBAマクロによるクエリ更新の流れを説明するため例を用いて説明します。
まず「更新したいクエリ」と 「全クエリ実行用マクロ」 を準備します。
例として下図の元データをフィルタする「クエリA」「クエリB 」と 上述したコードを記載したマクロ 「test」を用意します。
- クエリA:元データを商品IDが「A」の行を抽出
- クエリA:元データを商品IDが「B」の行を抽出
- マクロtest:全クエリ実行用マクロ

元データが修正されたと仮定して、元データの一部を変更します。ここでは、6行目のAをBに変更しています。

- 開発タブにあるマクロをクリックする。
- クエリを実行するマクロを選択して実行をクリックする。

以上で全てのクエリの更新が完了です。
下図のようにクエリが実行されてクエリAとクエリBの結果が変わっています。

Sponsored link
個別のクエリを更新する
クエリ名を指定して実行するVBAマクロ
特定のクエリをクエリ名で指定して実行する場合は、下記のマクロを実行します。
Sub test()
ActiveSheet.ListObjects("クエリ名").QueryTable.Refresh
End Sub
マクロによる指定クエリ更新手順
VBAマクロによるクエリ更新の流れを説明するため例を用いて説明します。
まず「更新したいクエリ」と 「全クエリ実行用マクロ」 を準備します。
例として下図の元データをフィルタする「クエリA」「クエリB 」と 上述したコードを記載したマクロ 「test」を用意します。そしてクエリAのみを実行します。
- クエリA:元データを商品IDが「A」の行を抽出
- クエリA:元データを商品IDが「B」の行を抽出
- マクロtest:クエリA実行用マクロ(下記参照)
Sub test()
ActiveSheet.ListObjects("クエリA").QueryTable.Refresh
End Sub

元データが修正されたと仮定して、元データの一部を変更します。ここでは、6行目のAをBに変更しています。

- 開発タブにあるマクロをクリックする。
- クエリを実行するマクロを選択して実行をクリックする。

以上でクエリAの更新が完了です。クエリAのみが更新されており、クエリBは元のまま変わっていません。

Sponsored link
複数のクエリを順番に実行する
複数クエリを順番に更新するVBAマクロ
複数のクエリを一つ一つ順番に更新完了させるには、下記のマクロを使用します。
下記マクロのquerylistには更新したいクエリ名をカンマ区切りで実行する順番通りに入力してください。 Do While~Loopの部分でクエリが更新完了するまで待つ処理をしています。
Sub test()
Dim querylist As Variant
Dim query As QueryTable
Dim queryname As Variant
querylist = Array("更新するクエリ名1", "更新するクエリ名2", ...)
For Each queryname In querylist
Set query = ActiveSheet.ListObjects(queryname).QueryTable
query.Refresh BackgroundQuery:=False
Do While query.Refreshing
DoEvents
Loop
Next
End Sub
※queylist,query,querynameなどの変数名は任意の名前に変更してください。
マクロによる複数クエリの順次更新手順
VBAマクロによるクエリ更新の流れを説明するため例を用いて説明します。
まず「更新したいクエリ」と 「全クエリ実行用マクロ」 を準備します。
例として下図の元データをフィルタする「クエリA」「クエリB 」と 上述したコードを記載したマクロ 「test」を用意します。そしてクエリAとクエリBを順番にマクロで実行します
- クエリA:元データを商品IDが「A」の行を抽出
- クエリA:元データを商品IDが「B」の行を抽出
- マクロtest:クエリ順次実行用マクロ(下記参照)
Sub test()
Dim querylist As Variant
Dim query As QueryTable
Dim queryname As Variant
querylist = Array("クエリA", "クエリB")
For Each queryname In querylist
Set query = ActiveSheet.ListObjects(queryname).QueryTable
query.Refresh BackgroundQuery:=False
Do While query.Refreshing
DoEvents
Loop
MsgBox ("クエリ更新完了")
Next
End Sub

元データが修正されたと仮定して、元データの一部を変更します。ここでは、6行目のAをBに変更しています。

- 開発タブにあるマクロをクリックする。
- クエリを実行するマクロを選択して実行をクリックする。

マクロ実行後、まずはクエリAが実行され完了後にメッセージボックスが表示されます。クエリAの結果だけが更新されています。

メッセージボックスのOKをクリックすると、続いてクエリBが更新されて再度メッセージボックスが表示されます。このように順番にクエリが実行されます。

以上でクエリの順次実行は完了です。
Sponsored link
パワークエリの学習本についてはコチラの記事でまとめてますので参考にしてみてください。
・初心者向けおすすめ学習本
・初中級者向けおすすめ学習本
コメント
コメント一覧 (2件)
これって接続が一瞬で終わる前提で書いてますよね?
バックグラウンドクエリ実行が終わったかどうかを派手に知らせるポップアップを出したいんですけど
バックグラウンドクエリ完了のトリガーってなんなんです?
クエリ完了のトリガーはquery.Refreshing(クエリが実行中)ではなくなることとしています。
手順解説の中に一つのクエリが完了したらメッセージボックスを表示する例も記載していますので参考にしていただければと思います。