毎週月曜日の朝、出社してすぐにExcelを開き、「すべて更新」ボタンを押す作業を繰り返していませんか。Power Queryで構築したデータ加工の仕組みは優秀でも、肝心の「更新」だけは手作業が残ってしまいがちです。
「毎週月曜日の9:00に更新したい」「毎月第1営業日の朝に自動実行したい」といったスケジュールが決まっている場合に手作業ではなく、自動で更新される仕組みがあると業務が楽になります。
本記事では、Power Automate DesktopとWindowsタスクスケジューラーを組み合わせて、Excelデータ更新を完全に自動化する方法を手順ごとに解説します。
その他の更新自動化の方法については、「ExcelでPower Queryのクエリ更新を自動化する | 概要編」で解説しています。
自動化の全体像
構成要素は3つです。それぞれの役割を整理します。
| 構成要素 | 役割 |
|---|---|
| ExcelのVBAマクロ | Power Queryのクエリ更新を実行する |
| Power Automate Desktop(フロー) | Excelを開き、VBAマクロを実行して閉じる一連の操作を自動化する |
| Windowsタスクスケジューラー | 決めた日時にPower Automate Desktopのフローを起動する |
料理に例えると、VBAマクロが「レシピ(調理手順)」、Power Automate Desktopが「調理ロボット」、タスクスケジューラーが「タイマー付きスイッチ」に相当します。タイマーが鳴るとロボットが動き出し、レシピ通りに調理(クエリ更新)を完了させます。

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

CSVファイル:
Excelファイル:
実際の手順
手順1:ExcelにVBAマクロ(クエリ更新)を準備する
まず、Excelファイル内にクエリを更新するVBAマクロを作成します。
ファイルをXLSM形式で保存する
「ファイル」タブをクリックします。

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

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


Excelマクロを記述する
Alt + F11 キーを押して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インスタンス | |
| 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_QueryRefreshMicrosoft Storeからインストールした場合:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -Command "Start-Process \"ms-powerautomate:/console/flow/run?workflowName=Excel_QueryRefresh""動作確認として、コマンドプロンプトに上記コマンドを貼り付けて実行し、Excelが起動してクエリが更新されることを確認します。
手順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 |
| 引数の追加 | |

参考:URL またはデスクトップ ショートカットでデスクトップ フローを実行する
完了
「完了」をクリックします。

手順5:動作確認とテスト実行
設定が完了したら、タスクスケジューラーから手動でテスト実行して動作を確認します。
手動でタスクを実行する
タスクスケジューラーで作成したタスクを右クリックし、「実行する」をクリックします。

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

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

動作を確認する
フローの動作は次のことを順番に確認します。
- Excelファイルが自動的に開く
- クエリが更新される
- ファイルが保存されてExcelが閉じる
フローが完了すると、画面右下に次のポップアップが表示されます。

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

よくあるエラーと対処法
Excelファイルが開けない・パスが見つからないエラー
症状: Power Automate Desktopの「Excelの起動」アクションでエラーが発生する。
原因: ドキュメントパスに誤りがある、またはファイルが移動・削除されている。
解決策:
- パスに日本語やスペースが含まれている場合、フォルダ名を英数字のみに変更する
- エクスプローラーでファイルを右クリック→「プロパティ」でフルパスを確認し、Power Automate Desktopの設定と一致しているか確認する
- ファイルが存在するか実際に開いて確認する
フローが起動しない(タスクスケジューラー側の設定ミス)
症状: タスクスケジューラーの「最後の実行結果」がエラーコードになっている。
原因: PAD.Console.Host.exeのパスや引数の記述が誤っている。
解決策:
- コマンドプロンプトで手動実行して動作することを先に確認する
- タスクスケジューラーの「操作」タブでプログラムのパスと引数が正しいか再確認する
- 引数の
/flowの後ろに半角スペースを入れ忘れていないか確認する
よくある誤記の例を示します。
# ❌ 誤り:スペースなし
/flow"フローID"
# ✅ 正しい:スペースあり
/flow "フローID"クエリが更新されない(VBAの実行権限・マクロ設定)
症状: Excelは起動するがクエリが更新されず、保存されたデータが古いまま。
原因: Excelのマクロセキュリティ設定によってVBAの実行がブロックされている可能性があります。
解決策:
- Excelの「ファイル」タブ→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」→「マクロの設定」を開く
- 「すべてのマクロを有効にする」または「デジタル署名されたマクロを除き、すべてのマクロを無効にする」に設定する
「すべてのマクロを有効にする」はセキュリティリスクが高まるため、社内ポリシーを確認した上で設定してください。信頼できる場所(トラストセンター)へのファイル配置も有効な代替手段です。
注意点・実務Tips
ファイルの保存場所に関する注意
ネットワークドライブ(\server\share…)に保存されているファイルの場合、タスクスケジューラーの実行タイミングによってはネットワーク接続が確立される前にフローが起動してしまうことがあります。
対策として、ローカルドライブ(Cドライブなど)に保存することを推奨します。どうしてもネットワークドライブを使用する場合は、タスクスケジューラーの「条件」タブで「ネットワーク接続時のみタスクを開始する」を有効にしてください。
複数クエリがある場合の対応
ブック内に複数のクエリが存在する場合でも、RefreshAllはすべてのクエリを一括更新します。
一部のクエリだけを更新したい場合は、次のように記述します。
' 特定のクエリ(テーブル名「売上データ」)のみ更新する
Sub QueryRefreshSingle()
' 「売上データ」という名前のテーブルに紐づくクエリを更新
ActiveSheet.ListObjects("売上データ").QueryTable.Refresh BackgroundQuery:=False
' 保存する
ActiveWorkbook.Save
End SubBackgroundQuery:=Falseを指定すると、更新が完了するまでVBAの処理を待機させられます。RefreshAllとCalculateUntilAsyncQueriesDoneの組み合わせと同様の効果です。
実行ログを残したい場合
Power Automate Desktopフローの実行履歴は、Power Automate Desktopの管理画面から確認できます。さらに細かくログを残したい場合は、VBAマクロ内で実行日時をログシートに書き出す処理を追加することも有効です。
まとめ
本記事で解説した内容をまとめます。
Power Automate Desktop × タスクスケジューラーによるクエリ自動更新の3ステップ:
- VBAマクロを準備する(
RefreshAll+CalculateUntilAsyncQueriesDone+Save) - Power Automate Desktopでフローを作成する(Excelを開く → マクロ実行 → 閉じる)
- タスクスケジューラーでスケジュール実行を設定する(PAD.Console.Host.exeをコマンドで起動)
一度設定してしまえば、以降は完全にノータッチで定期更新が実現できます。「毎朝の更新作業」「月次レポートの準備」といった定型業務に、ぜひ活用してみてください。
PowerShellを使った自動化とも比較しながら、自分の環境に合った方法を選んでください。

