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

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に変更しています。

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

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

下図のようにクエリが実行されてクエリ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
画像に alt 属性が指定されていません。ファイル名: 305-1024x314.png
元データの変更

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

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

以上でクエリ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

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

元データの変更

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

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

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

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

以上でクエリの順次実行は完了です。

Sponsored link

Power Queryのおすすめ書籍

パワークエリの学習本についてはコチラの記事でまとめてますので参考にしてみてください。

初心者向けおすすめ学習本

初中級者向けおすすめ学習本

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

コメント

コメント一覧 (2件)

  • これって接続が一瞬で終わる前提で書いてますよね?
    バックグラウンドクエリ実行が終わったかどうかを派手に知らせるポップアップを出したいんですけど
    バックグラウンドクエリ完了のトリガーってなんなんです?

    • クエリ完了のトリガーはquery.Refreshing(クエリが実行中)ではなくなることとしています。
      手順解説の中に一つのクエリが完了したらメッセージボックスを表示する例も記載していますので参考にしていただければと思います。

コメントする

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

CAPTCHA

目次