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?

第2回:PADでシナリオ分岐とデータ取得フローを設計する【引数設計+Access/SQL編】

Posted at

こんにちは、藤田です。
前回はVBAからPADを呼び出す入口について説明しましたが、今回はその続きを「PAD側で何をどう動かすか?」について深掘りします。CLIで渡された実行シナリオをPAD内で分岐して、AccessやSQL Serverからデータを取得するフローを設計する方法を丁寧に解説していきます。


🧩PAD構成の基本方針

VBAから実行されるバッチファイル(run_pad.bat)には、以下のような構文で引数を渡しています:

run_pad.bat Access
run_pad.bat SQL
run_pad.bat ALL

この引数(実行フラグ)をPAD内で受け取り、以下のように処理を分岐させたい:

引数 処理内容
Access Accessからデータ取得してCSV出力
SQL SQL Serverからデータ取得してCSV出力
ALL Access → 成形 → メール送信まで一括実行

📦CLIからPADへ引数を渡す方法

PADはCLIから起動する際、--input パラメータを使ってフロー内にデータを渡せます。

バッチ側のコード:

@echo off
set scenario=%1

"C:\Program Files (x86)\Power Automate Desktop\PAD.Console.Host.exe" run --flow "自動処理フロー" --environment "Default-Environment" --input "シナリオ=%scenario%"

ここで渡された "シナリオ" という入力引数を、PAD内で「Input パラメータ」として受け取る設計になります。


🛠PADでの引数受け取りと分岐

PADのフロー設計では、下記のように進めます:

① 「入力パラメーターの作成」

  • フロー設定画面 → 入力パラメーター → シナリオ(Text) を作成

② 条件分岐による処理切り替え

IF [シナリオ] = "Access" → Accessフロー呼び出し  
ELSE IF [シナリオ] = "SQL" → SQLフロー呼び出し  
ELSE IF [シナリオ] = "ALL" → サブルーチン連続呼び出し  
ELSE → エラーメッセージ出力

PAD内アクション例:

If シナリオ = "Access"
    → サブルーチン「GetAccessData」
Else If シナリオ = "SQL"
    → サブルーチン「GetSQLData」
Else If シナリオ = "ALL"
    → サブルーチン「GetAccessData」
    → サブルーチン「CleanseCSV_VBAへ処理権限渡し」
    → サブルーチン「SendEmail」
Else
    → Display message "不正な引数です"

🧠Accessデータ取得フローの設計

PADにはAccessとの直接接続機能はないため、OLEDB経由でクエリを投げる構成にします。

必要な入力:

  • MDBファイルのパス(またはACCDB)
  • SELECT文(クエリ)

アクション例:

1. Set Variable [DBPath] = "C:\Data\database.accdb"
2. Set Variable [SQL] = "SELECT * FROM Sales"
3. Execute SQL Statement (Provider=Microsoft.ACE.OLEDB.12.0)
   → Connection String: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%DBPath%;
   → SQL Query: %SQL%
   → Store Results In → List → %resultRows%
4. Loop through %resultRows%
   → Write Text to CSV file

※CSV出力には「Append line to text file」や「Write to CSV」などのアクションを組み合わせ


🧠SQL Serverからのデータ取得フロー設計

こちらはPADの「Execute SQL Statement」アクションがそのまま使えます。

事前準備:

  • SQL Serverの接続文字列(認証設定が必要)
  • 実行するクエリ

アクション例:

Set Variable [ConnectionString] = "Server=localhost;Database=SalesDB;Integrated Security=True;"
Set Variable [Query] = "SELECT * FROM Sales WHERE SaleDate >= GETDATE() - 30"

Execute SQL Statement
    → Connection String: %ConnectionString%
    → SQL Query: %Query%
    → Results → %sqlResults%

Loop %sqlResults%
    → Export each row as CSV

注意点:

  • 認証が必要な場合、Windows認証かSQL認証を選ぶこと
  • パフォーマンスのためSELECT句に制限を入れる(WHERE句で絞るなど)

🗂ファイル出力(CSV保存)

PADでは、出力ファイルを固定パスで保存することが多いですが、ファイル名に日付を入れてバージョン管理することもできます。

Set Variable [Filename] = "C:\Output\Data_" + FormatDateTime(Now, "yyyyMMdd") + ".csv"
Write Text → %Filename%

この形式にしておけば、同じ日に何度か実行してもファイルが上書きされずに保存されます。


🔁「ALL」モードの流れ

「ALL」フラグで一括実行する場合は、以下のようなサブルーチンの連続実行になります:

  1. Access接続 → データ取得 → CSV保存
  2. VBA呼び出し(CSV整形)※VBA側で処理
  3. PADに制御戻して → Outlookでメール送信

この構成により、処理単位で分けたフローを組み合わせて再利用性の高い設計ができます。


🔍ログ設計とエラー処理

PADはログ出力機能が控えめなので、処理の開始・終了・失敗を記録する仕組みを明示的に追加しておくと安心です。

例:

Write to Text File: "[%Now%] Access処理開始"
Try → Execute SQL Statement
    If Success → Write to Text File: "[%Now%] Access処理成功"
    Else → Write to Text File: "[%Now%] Access処理失敗: %ErrorMessage%"

これにより、定期実行時でもログファイルを見れば失敗箇所がすぐ分かるようになります。


🧠次回予告(第3回)

次回はCSVに出力されたデータを、Excel VBAでクレンジング・整形処理するフェーズについて書いていきます!

  • 空白行の削除/桁数の補正
  • 表示用のレイアウト調整(罫線・列幅・フォント)
  • データ種別による成形処理(郵便番号・日付など)

VBA職人魂が光るフェーズですので、しっかりコード付きで解説していきます💡

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?