PR

Power QueryのExcelデータ更新を自動化する|Power Automate Desktop活用編

Power QueryのExcelデータ更新を自動化する|Power Automate Desktop活用編 Power Query応用
スポンサーリンク

毎週月曜日の朝、出社してすぐにExcelを開き、「すべて更新」ボタンを押す作業を繰り返していませんか。Power Queryで構築したデータ加工の仕組みは優秀でも、肝心の「更新」だけは手作業が残ってしまいがちです。

「毎週月曜日の9:00に更新したい」「毎月第1営業日の朝に自動実行したい」といったスケジュールが決まっている場合に手作業ではなく、自動で更新される仕組みがあると業務が楽になります。

本記事では、Power Automate DesktopWindowsタスクスケジューラーを組み合わせて、Excelデータ更新を完全に自動化する方法を手順ごとに解説します。

その他の更新自動化の方法については、「ExcelでPower Queryのクエリ更新を自動化する | 概要編」で解説しています。

本記事のExcelは次のバージョンを使用しています。
Microsoft® Excel® for Microsoft 365 MSO (バージョン 2602 ビルド 16.0.19725.20126) 64 ビット

Power Automate Desktopは次のバージョンを使用しています。
バージョン:2.65.00145.26040
Microsoft Store のバージョン:11.2602.145.0

スポンサーリンク

自動化の全体像

構成要素は3つです。それぞれの役割を整理します。

構成要素役割
ExcelのVBAマクロPower Queryのクエリ更新を実行する
Power Automate Desktop(フロー)Excelを開き、VBAマクロを実行して閉じる一連の操作を自動化する
Windowsタスクスケジューラー決めた日時にPower Automate Desktopのフローを起動する

料理に例えると、VBAマクロが「レシピ(調理手順)」、Power Automate Desktopが「調理ロボット」、タスクスケジューラーが「タイマー付きスイッチ」に相当します。タイマーが鳴るとロボットが動き出し、レシピ通りに調理(クエリ更新)を完了させます。

自動化の全体像:Windows タスクスケジューラー+Power Automate Desktop+ Excel VBAによるデータ更新
スポンサーリンク

本記事で使用するサンプルデータ

本記事では、次の売上明細データのCSVファイルと、それを読み込むPower Queryを実装したExcelファイルを例に解説します。

CSVファイル:

Excelファイル:

スポンサーリンク

実際の手順

手順1:ExcelにVBAマクロ(クエリ更新)を準備する

まず、Excelファイル内にクエリを更新するVBAマクロを作成します。

ファイルをXLSM形式で保存する

「ファイル」タブをクリックします。

「コピーを保存」ー「参照」をクリックします。

ファイルの種類を「Excel マクロ有効ブック(*.xlsm)」に変更して保存をクリックします。

Excelマクロを記述する

Alt + F11 キーを押してVBAエディターを起動します。
「挿入」→「標準モジュール」をクリックします。

次のコードを貼り付けます。

VBA
' すべてのクエリを更新するマクロ
Sub QueryRefreshAll()

    ' ブック内のすべてのクエリ・接続を更新する
    ActiveWorkbook.RefreshAll

    ' 更新完了まで待機する(非同期更新を同期に変換)
    ActiveWorkbook.Application.CalculateUntilAsyncQueriesDone

    ' 上書き保存する
    ActiveWorkbook.Save

End Sub

RefreshAllだけでは更新が非同期(バックグラウンド)で実行される場合があります。CalculateUntilAsyncQueriesDoneを追加すると、更新が完全に終わるまでマクロを待機させられます。直後にSaveを実行するため、この待機処理は必須です。

Ctrl + S で保存し、VBAエディターを閉じます。

クエリのプロパティで「バックグラウンドで更新する」をオフにする

クエリのプロパティで「バックグラウンドで更新する」がオンになっている場合は、オフへの変更を推奨します。「クエリ」タブー「プロパティ」ー「バックグラウンドで更新する」のチェックを外してください。

手順2:Power Automate Desktopでフローを作成する

Power Automate Desktopを起動し、新しいフローを作成します。

新しいフローを作成する

「新しいフロー」をクリックします。

フロー名に「Excel_QueryRefresh」などわかりやすい名前を付け、「作成」をクリックします。

Excelを起動するアクションを追加する

左側のアクション一覧から「Excel」ー「Excel の起動」をフロー上にドラッグ&ドロップします。

次の通り設定し、「保存」をクリックします。

設定項目
Excelの起動次のドキュメントを開く
ドキュメントパスC:\Users\ユーザー名\Documents\サンプルデータPower Query売上明細.xlsm
読み取り専用として開くオフ(デフォルト)
インスタンスを表示するオン(デフォルト)
生成された変数ExcelInstance(デフォルト)

ドキュメントパスは絶対パスで指定してください。相対パスでは実行時にエラーになる場合があります。

Excelマクロを実行するアクションを追加する

続けて「Excel」ー「Excel マクロの実行」をドラッグ&ドロップして追加します。

次の通り設定し、「保存」をクリックします。

設定項目
Excelインスタンス%ExcelInstance%(デフォルト)
マクロQueryRefreshAll

Excelを閉じるアクションを追加する

最後に「Excel」ー「Excelを 閉じる」をドラッグ&ドロップして追加します。

次の通り設定し、「保存」をクリックします。

設定項目
Excelインスタンス%ExcelInstance%(デフォルト)
Excelを閉じる前ドキュメントを保存しない(VBAマクロ内でSaveしているため)

手順3:フローの実行コマンドを確認する

タスクスケジューラーからPower Automate Desktopのフローを起動するには、コマンドラインから実行する必要があります。
フローの実行コマンドは、Power Automate Desktopのインストール方法によって異なります。

MSI からインストールした場合:

コマンドプロンプト
"C:\Program Files (x86)\Power Automate Desktop\dotnet\PAD.Console.Host.exe" ms-powerautomate:/console/flow/run?workflowName=Excel_QueryRefresh

Microsoft Storeからインストールした場合:

コマンドプロンプト
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -Command "Start-Process \"ms-powerautomate:/console/flow/run?workflowName=Excel_QueryRefresh""

動作確認として、コマンドプロンプトに上記コマンドを貼り付けて実行し、Excelが起動してクエリが更新されることを確認します。

workflowName=の後には、作成したフロー名を入力します。Excel_QueryRefreshとは違う名前にした場合は実行できないため、ご注意ください。

手順4:タスクスケジューラーでスケジュール実行を設定する

Windowsのタスクスケジューラーを使って、毎日(平日)の9:00に自動実行する設定を行います。
スタートメニューで「タスクスケジューラー」と検索して起動します。

基本タスクの作成

「操作」ー「基本タスクの作成」をクリックします。

次の通り設定し、「次へ」をクリックします。

設定項目
タスク名Excel_QueryRefresh_Daily
説明(任意)毎日(平日)にPower Queryを自動更新する

トリガーの設定

「毎週」を選択し、「次へ」をクリックします。

次の通り設定し、「次へ」をクリックします。

設定項目
開始日時任意の開始日を指定
時刻09:00:00
繰り返し間隔1週間ごと
曜日月曜日、火曜日、水曜日、木曜日、金曜日

操作の設定

「プログラムの開始」を選択し、「次へ」をクリックします。

次の通り設定し、「次へ」をクリックします。
設定内容は、Power Automate Desktopのインストール方法によって異なります。

MSI からインストールした場合:

設定項目
プログラム/スクリプトC:\Program Files (x86)\Power Automate Desktop\dotnet\PAD.Console.Host.exe
引数の追加ms-powerautomate:/console/flow/run?workflowName=Excel_QueryRefresh

Microsoft Storeからインストールした場合:

設定項目
プログラム/スクリプトC:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
引数の追加-Command "Start-Process \"ms-powerautomate:/console/flow/run?workflowName=Excel_QueryRefresh""

参考:URL またはデスクトップ ショートカットでデスクトップ フローを実行する

完了

「完了」をクリックします。

手順5:動作確認とテスト実行

設定が完了したら、タスクスケジューラーから手動でテスト実行して動作を確認します。

手動でタスクを実行する

タスクスケジューラーで作成したタスクを右クリックし、「実行する」をクリックします。

Power Automate Desktopが立ち上がり、フローを実行するか聞かれます。
「続行」をクリックします。

フローが実行されると、画面右下に次のポップアップが表示されます。

動作を確認する

フローの動作は次のことを順番に確認します。

  1. Excelファイルが自動的に開く
  2. クエリが更新される
  3. ファイルが保存されてExcelが閉じる

フローが完了すると、画面右下に次のポップアップが表示されます。

最後に、タスクスケジューラーの「状態」列が「準備完了」になっていることを確認します。

スポンサーリンク

よくあるエラーと対処法

Excelファイルが開けない・パスが見つからないエラー

症状: Power Automate Desktopの「Excelの起動」アクションでエラーが発生する。

原因: ドキュメントパスに誤りがある、またはファイルが移動・削除されている。

解決策:

  1. パスに日本語やスペースが含まれている場合、フォルダ名を英数字のみに変更する
  2. エクスプローラーでファイルを右クリック→「プロパティ」でフルパスを確認し、Power Automate Desktopの設定と一致しているか確認する
  3. ファイルが存在するか実際に開いて確認する

フローが起動しない(タスクスケジューラー側の設定ミス)

症状: タスクスケジューラーの「最後の実行結果」がエラーコードになっている。

原因: PAD.Console.Host.exeのパスや引数の記述が誤っている。

解決策:

  1. コマンドプロンプトで手動実行して動作することを先に確認する
  2. タスクスケジューラーの「操作」タブでプログラムのパスと引数が正しいか再確認する
  3. 引数の /flow の後ろに半角スペースを入れ忘れていないか確認する

よくある誤記の例を示します。

Power Automate
# ❌ 誤り:スペースなし
/flow"フローID"

# ✅ 正しい:スペースあり
/flow "フローID"

クエリが更新されない(VBAの実行権限・マクロ設定)

症状: Excelは起動するがクエリが更新されず、保存されたデータが古いまま。

原因: Excelのマクロセキュリティ設定によってVBAの実行がブロックされている可能性があります。

解決策:

  1. Excelの「ファイル」タブ→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」→「マクロの設定」を開く
  2. 「すべてのマクロを有効にする」または「デジタル署名されたマクロを除き、すべてのマクロを無効にする」に設定する

「すべてのマクロを有効にする」はセキュリティリスクが高まるため、社内ポリシーを確認した上で設定してください。信頼できる場所(トラストセンター)へのファイル配置も有効な代替手段です。

スポンサーリンク

注意点・実務Tips

ファイルの保存場所に関する注意

ネットワークドライブ(\server\share…)に保存されているファイルの場合、タスクスケジューラーの実行タイミングによってはネットワーク接続が確立される前にフローが起動してしまうことがあります。

対策として、ローカルドライブ(Cドライブなど)に保存することを推奨します。どうしてもネットワークドライブを使用する場合は、タスクスケジューラーの「条件」タブで「ネットワーク接続時のみタスクを開始する」を有効にしてください。

複数クエリがある場合の対応

ブック内に複数のクエリが存在する場合でも、RefreshAllはすべてのクエリを一括更新します。

一部のクエリだけを更新したい場合は、次のように記述します。

VBA
' 特定のクエリ(テーブル名「売上データ」)のみ更新する
Sub QueryRefreshSingle()

    ' 「売上データ」という名前のテーブルに紐づくクエリを更新
    ActiveSheet.ListObjects("売上データ").QueryTable.Refresh BackgroundQuery:=False

    ' 保存する
    ActiveWorkbook.Save

End Sub

BackgroundQuery:=Falseを指定すると、更新が完了するまでVBAの処理を待機させられます。RefreshAllCalculateUntilAsyncQueriesDoneの組み合わせと同様の効果です。

実行ログを残したい場合

Power Automate Desktopフローの実行履歴は、Power Automate Desktopの管理画面から確認できます。さらに細かくログを残したい場合は、VBAマクロ内で実行日時をログシートに書き出す処理を追加することも有効です。

スポンサーリンク

まとめ

本記事で解説した内容をまとめます。

Power Automate Desktop × タスクスケジューラーによるクエリ自動更新の3ステップ:

  1. VBAマクロを準備するRefreshAll + CalculateUntilAsyncQueriesDone + Save
  2. Power Automate Desktopでフローを作成する(Excelを開く → マクロ実行 → 閉じる)
  3. タスクスケジューラーでスケジュール実行を設定する(PAD.Console.Host.exeをコマンドで起動)

一度設定してしまえば、以降は完全にノータッチで定期更新が実現できます。「毎朝の更新作業」「月次レポートの準備」といった定型業務に、ぜひ活用してみてください。

PowerShellを使った自動化とも比較しながら、自分の環境に合った方法を選んでください。

Excel/Power Queryのデータ加工相談サービス

Excel/Power Queryのデータ加工で悩んでおり、ネットや本で調べても解決しない場合は、一度ご相談下さい。

やりたいことをヒアリングして解決までサポートいたします。

ご相談内容の例
  • 前任者が作ったExcelファイルの数式等が意味不明で困っている
  • Power Queryを使ってExcelでデータ加工を行いたいが、うまく使いこなせない
  • 手作業が多く、業務効率化を行いたいが、どう進めていいか分からない

ココナラでご相談を受け付けております。ココナラの会員登録が必要になります。

Power Queryの学習に役立つおすすめ本
初心者向け 初心者~中級者向け 中級者~上級者向け
Power Query応用
スポンサーリンク
プロフィール
たがみ

IT業界20年程度のシステムエンジニアです。
構築したシステムのデータ検証をExcelで実施することが多く、検証作業の効率化を模索しているときにPower Queryと出会いました。
Excel業務効率化の手助けになればと当ブログを開設しました。
今ではデータ分析でPower BIを活用しており、Power BI、Excelの両方でPower Queryを活用しています。

たがみをフォローする
シェアする
たがみをフォローする
タイトルとURLをコピーしました