PowerQuery 更新の自動化・定期実行【PowerShell編】

パワークエリのクエリを定期実行・定期更新する方法を紹介します。

ドノ

ここではWindowsのPowerShellタスクスケジューラを利用した方法を紹介します。

目次

PowerQueryの設定・準備

まずは自動更新用のパワークエリの準備と設定を行います。

自動実行したいクエリの作成

自動更新用のクエリを作成してください。ここでは例として「クエリA」という名前のクエリを作成しています。

定期更新用の設定

PowerShellからクエリを更新する場合にエラーが発生しないように「バックグラウンドで更新する」をオフにします。

  1. 対象のクエリを右クリックして「プロパティ」を選択します。
  1. 設定画面の「バックグラウンドで更新する」のチェックを外して「OK」を選択します。

ファイルを保存してPowerQuery側の設定は完了です。

PowerShellの設定・準備

次にPowerShellの準備と設定を行います。

実行ポリシーの確認と変更

PowerShellの実行ポリシーが「RemoteSigned」になっていることを確認します。なっていない場合は変更します。

STEP
PowerShellの起動

Windowsの検索窓で「PowerShell」を入力して、表示される「PowerShell」を右クリックして管理者として実行します。

STEP
実行ポリシーの確認

「Get-ExecutionPolicy」を入力し、Enterキーを押す。

「RemoteSigned」になっていればOKです。「Restricted」であれば下記に従ってポリシーを変更してください。

STEP
実行ポリシーの変更

「Set-ExecutionPolicy RemoteSigned」を入力し、Enterキーを押します。実行ポリシーの変更について確認されますので問題なければ「Y」を入力してEnterキーを押します。

再度「Get-ExecutionPolicy」を入力して、実行ポリシーが「RemoteSigned」になっていればOKです。

クエリ更新用のPowerShellファイルを作成

次にクエリを実行するPowerShellファイルを作成します。

テキストエディタ(メモ帳など)に下記のスクリプトを記載して保存します。このときファイル拡張子は「.ps1」としてください。

"ファイルパス"は環境に合わせて自由に設定変更してください

# 設定項目
$FilePath = "ファイルパス"  # 自由に変更してください

# Excelアプリケーションを起動
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false        # Excelを非表示で実行(表示したい場合はTrueに変更)

# 対象のExcelファイルを開く
$Workbook = $Excel.Workbooks.Open($FilePath)

# 全てのクエリをリフレッシュ
$Workbook.RefreshAll()

# 更新が完了するまで待機
do {
    Start-Sleep -Seconds 1
} while ($Excel.CalculationState -ne 0 -or $Excel.RefreshingData)

# ファイルを保存して閉じる
$Workbook.Save()
$Workbook.Close()

# Excelアプリケーションを終了
$Excel.Quit()

# COMオブジェクトを解放
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Excel) | Out-Null
Remove-Variable Excel

ここでは、下図のように「UpdatePowerQuery.ps1」という名前でC:\test\UpdatePowerQuery.ps1に保存しています。このファイルの保存場所をタスクスケジューラで使用します。

タスクスケジューラの設定

タスクスケジューラによる定期実行の設定方法について紹介します。

説明例として下記の環境で 毎日AM9:00にクエリを定期実行する設定方法を紹介します。

  • クエリ実行用のPowerShellファイルのパス:C:\test\UpdatePowerQuery.ps1

タスクスケジューラ設定手順

タスクスケジューラを用いて毎日AM9:00にフローを定期実行する設定方法を紹介します。

STEP
タスクスケジューラの起動

Windowsの検索窓で「タスクスケジューラ」を入力して、表示される「タスクスケジューラ」を起動します。

STEP
新しいタスクを作成

「タスクスケジューラライブラリ」を選択して操作にある「タスクの作成」をクリックする。

新規タスクにおいてタスク名とセキュリティオプションを設定します。

セキュリティオプションにおいては下記にチェックを入れてください。

  • ユーザがログオンしているときのみ実行する
  • 最上位の特権で実行する
STEP
トリガーの設定

次にフロー実行の日時を設定します。

トリガータブの「新規」をクリックする。

設定で実行したい日時を設定してください。また、必ず「有効」にチェックが入ってることを確認してください。設定が完了したら「OK」をクリックします。

下図では2025年4月1日から毎日9時に更新が実行されるように設定しています。

[タスクの開始]の選択で実行タイミングをログオン時スタートアップ時などにも設定できます。

STEP
フロー実行設定

次に実行するファイルの選択と設定をします。

操作タブの「新規」をクリックする。

設定項目
  • プログラム/スクリプト:powershell.exe のファイルパス
  • 引数の追加: -Command ps1ファイルのフルパス

今回の環境での具体例は下記です。

  • プログラム/スクリプト:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 引数の追加:Command C:\test\UpdatePowerQuery.ps1
ドノ

32bit版Windows OSの場合、powershell.exe のファイルパスC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeになると思います

実行結果の確認

作成したタスクが正しく動作するか手動で確認します。

対象のタスクを選択して「実行する」をクリックしてください。

下記のように「前回の実行結果」が「この操作を正しく終了しました。(0x0)」となっていればOKです。

あとは、次の実行時間まで待って問題なく更新できているか確認してみてください。

タスクスケジューラが実行されない場合(0x1)

タスクスケジューラの実行結果が(0x1)となっている場合 や バッチファイルが実行されない場合は下記を試してみてください。

対処方法
  • powershellファイルの格納場所の変更(ファイルパスの確認)
  • ファイルパスを””で囲む

Sponsored link

Power Queryのおすすめ書籍

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

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

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

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

コメント

コメントする

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

CAPTCHA

目次