こんにちは、藤田です。
今回から6回に渡って、Excel VBAからPower Automate for Desktopを呼び出して複数処理工程を自動化した構成について語っていきます。
手動作業が多すぎて毎回うんざりしていた帳票処理やデータ取得業務を、VBA+PADで一括自動化したらめちゃくちゃ快適になったので、忘れないうちに記録しておこうと思い立った次第です。
🔄やりたかった処理概要(設計イメージ)
処理は大きく分けて以下の工程:
[Excel VBA] → [PAD 起動(引数付き)]
→ [AccessまたはSQLからデータ取得]
→ [CSV保存] → [VBAで成形・整形処理]
→ [Outlookでメール送信]
各工程はバラバラに動かすこともできるけど、今回はそれぞれに対応した個別ボタンと、一括実行ボタンの両方をVBA側に用意することにしました。
🖥️使用技術一覧
技術 | 用途 |
---|---|
VBA | UI(ボタン)/CSV整形/Outlook送信 |
PAD | データ取得(Access or SQL)/CSV生成 |
タスクスケジューラ(オプション) | 定時起動に備えたPAD実行構成(別記事) |
CMD/バッチ | 引数付き実行の橋渡し |
Outlook COM | メール送信の自動化 |
これらを組み合わせることで、ローコード構成ながら「クラウドでもローカルでも動けるデスクトップ業務エンジン」が完成します。
🧪VBA側:PADを呼び出す構成
まずはExcelからPADを起動するための仕組みです。
当時の環境ではPADは直接VBAからは操作できないため、バッチファイルやCMDコマンド経由で起動する構成にします。さらに、どの処理を実行するか引数でPADに伝える設計にしました。
💡パターン1:Shell関数でバッチ実行(引数付き)
Sub RunPAD_GetAccessData()
Dim scenario As String
scenario = "Access"
Shell "cmd.exe /c C:\PAD\run_pad.bat " & scenario, vbNormalFocus
End Sub
Sub RunPAD_GetSQLData()
Shell "cmd.exe /c C:\PAD\run_pad.bat SQL", vbNormalFocus
End Sub
Sub RunPAD_RunAll()
Shell "cmd.exe /c C:\PAD\run_pad.bat ALL", vbNormalFocus
End Sub
run_pad.bat
ファイルには、後述するCLIの引数受け取り処理が入っています。
🧾ボタン設計(UI)
Excelのボタンは以下のように配置:
ボタン | 実行処理 |
---|---|
Accessデータ取得 | PADでAccessに接続し、CSV出力 |
SQLデータ取得 | PADでSQL Serverから取得 |
CSV整形 | VBAで成形処理(空白除去・列並び調整) |
メール送信 | Outlookで自動送信 |
一括実行 | 上記全てのフローを順に呼び出し |
※一括実行時はVBA→PAD(ALL)を引数で渡すように構成
📂PADの準備(今回は概要だけ)
PAD側では、引数を受け取って以下のように分岐させています:
IF 引数 = "Access" → Access用フロー実行
IF 引数 = "SQL" → SQL用フロー実行
IF 引数 = "ALL" → Access→整形→メールまで実行
この処理は、PAD内のフローで「入力引数」機能と「条件分岐」アクションを使って対応できます。詳しくは第2回で解説予定!
📦run_pad.bat ファイルのサンプル(実行橋渡し)
@echo off
set scenario=%1
REM Power Automate CLIの実行
"C:\Program Files (x86)\Power Automate Desktop\PAD.Console.Host.exe" run --flow "自動処理フロー" --environment "Default-Environment" --input "シナリオ=%scenario%"
CLIでPADを起動し、シナリオ引数を渡しています。PAD側で "シナリオ"
を受け取って処理を分岐させる設計。
🧠まとめと次回予告
今回の内容をまとめると:
- VBAからPADを呼び出すには
Shell
と.bat
の組み合わせが便利 - 処理シナリオごとに引数で分岐させることで、1つのPADフローを多用途に使える
- VBA側でボタン設計を工夫すれば「個別/一括」どちらも実装可能
次回は、PAD側で引数を受け取り、処理を分岐させる方法と、Access・SQL接続フローの組み立て方についてガッツリ書いていきます!