0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第1回:VBAからPADを呼び出して、自動処理の入口を整える【導入&全体設計編】

Posted at

こんにちは、藤田です。
今回から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接続フローの組み立て方についてガッツリ書いていきます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?