PowerQuery VBAマクロでクエリを更新する|順番に実行する

PowerQuery(パワークエリ)で作成したクエリをVBAマクロで実行する方法ついて紹介します。複数のクエリを順番に実行する方法も解説しています。

目次

VBAマクロでクエリを更新する

マクロでクエリを更新する方法は下記の2つあります。ファイルに含まれる全てのクエリを実行する方法とクエリ名を指定して個別のクエリを実行する方法です。

  • すべてのクエリを更新(RefreshAll)
  • 一部のクエリを更新(Refresh)

全てのクエリを実行する

開いているファイルの全てのクエリを実行する場合は、下記のマクロを実行します。

Sub test()
    ActiveWorkbook.RefreshAll
End Sub

注意点として、クエリの更新が完了するタイミングはコントロールできません。完了を待って順番に実行したい場合は後述する方法を参考にしてください。

【使用例】

クエリとマクロを準備する

下図のクエリAとクエリBをマクロで実行します。クエリAとクエリBは商品IDを用いて元データをフィルタするクエリであり、上述したマクロ 「test」を準備しておきます。

元データを変更する(される)

元データを変更します。ここでは、6行目のAをBに変更しています。

マクロを実行する
  1. 開発タブにあるマクロをクリックする。
  2. クエリを実行するマクロを選択して実行をクリックする。
更新完了

以上で全てのクエリの更新が完了です。

個別のクエリを実行する

個別のクエリをクエリ名で実行する場合は、下記のマクロを実行します。

Sub test()
    ActiveSheet.ListObjects("クエリ名").QueryTable.Refresh
End Sub

複数のクエリを実行したい場合は、クエリ名を変えた上記のスクリプトを複数入力してください。

【使用例】

クエリとマクロを準備する

下図のクエリAをマクロで実行します。クエリAは商品IDを用いて元データをフィルタするクエリであり、上述したマクロ 「test」を準備しておきます。testのスクリプトは下記の通りです。

Sub test()
    ActiveSheet.ListObjects("クエリA").QueryTable.Refresh
End Sub
画像に alt 属性が指定されていません。ファイル名: 305-1024x314.png
元データを変更する(される)

元データを変更します。ここでは、6行目のAをBに変更しています。

マクロを実行する
  1. 開発タブにあるマクロをクリックする。
  2. クエリを実行するマクロを選択して実行をクリックする。
更新完了

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

Sponsored link

複数のクエリを順番に実行する(更新完了を確認)

複数のクエリを一つ一つ順番に更新完了させるには、下記のマクロを使用します。

下記マクロの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などの変数名は任意の名前に変更してください。

【使用例】

クエリとマクロを準備する

下図のクエリAとクエリBを順番にマクロで実行します。上述したマクロのquerylistに格納する値を「”クエリA”, “クエリ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

ここでは、更新が順番に確認するためにクエリが一つ更新されるごとにメッセージボックスが表示されるように変更しています。実際に使用する場合は、「MsgBox (“クエリ更新完了”)」は削除してください。

元データを変更する(される)

元データを変更します。ここでは、6行目のAをBに変更しています。

マクロを実行する
  1. 開発タブにあるマクロをクリックする。
  2. クエリを実行するマクロを選択して実行をクリックする。
順番にクエリ更新

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

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

Sponsored link

まとめ

今回は作成したクエリをVBAマクロで実行する方法ついて紹介しました。状況に合わせて下記のマクロを使ってみてください。

  1. 全てのクエリを実行
  2. クエリ名を指定して個別のクエリを実行
  3. クエリ名を指定して複数のクエリを実行
  4. 複数のクエリを順番に実行(クエリの更新が完了次第、順番に実行)
Power Queryのおすすめ書籍

パーワークエリの基本的な使い方についての初心者向けの解説書です。基本を体系的に学ぶと習得も早くなりますので、気になった方はサンプルを確認してみてください。

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

この記事を書いた人

仕事、お金、旅行のことなどメモしてます。
仕事ではTableauを勉強中!
初心者にもわかりやすいように学んだことを発信していきます。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次