Power Automate Desktopで仕入先サイトの在庫×価格を横断検索→Excel集計する自動化フローの作り方

  • URLをコピーしました!
目次

🎯 目的とやりたいこと

  • 自社在庫管理Excelから品番一覧を読み込み
  • 3社の仕入先サイト(例:A社、B社、C社)でそれぞれ検索
  • 在庫数/価格を取得
  • 最終的に 横持ちで1シートに集計stock_price.xlsx
  • サイトUIの違いはサブフローで吸収(メンテ性◎)
  • 失敗した品番は別ファイルに出力(処理全体は止めずに継続)

🔄 自動処理全体フロー(概要図)

[1] 品番リスト読み取り(item_list.xlsx)
 ↓
[2] 1品番ごとに処理
     ├─ サブフロー:A社検索
     ├─ サブフロー:B社検索
     ├─ サブフロー:C社検索
 ↓
[3] 結果を1行にまとめ、stock_price.xlsxに追記
 ↓
[4] 失敗リスト(品番+理由)をerror_log.csvに出力

📁 フォルダ構成(プロジェクト構造)

StockCheckerBot/
├─ main_flow.padx
├─ modules/
│   ├─ SearchACompany.padx
│   ├─ SearchBCompany.padx
│   ├─ SearchCCompany.padx
│   └─ Utilities/
│       ├─ WaitForStableDOM.padx
│       └─ WriteErrorLog.padx
├─ data/
│   ├─ item_list.xlsx          ← 品番リスト
│   ├─ stock_price.xlsx        ← 結果集計(横持ち)
│   ├─ error_log.csv           ← 失敗記録
├─ config.json                 ← セレクタ設定や時間調整など

📄 各ファイルの内容


item_list.xlsx

品番
ABC123
XYZ456
LMN789

stock_price.xlsx(出力形式)

品番A社_在庫A社_価格B社_在庫B社_価格C社_在庫C社_価格
ABC12320¥1,20018¥1,3000
XYZ456エラー5¥98010¥1,050

error_log.csv

日時,品番,サイト,エラー内容
2025/09/11 10:01,ABC123,A社,在庫数のDOM取得失敗

🧠 フローの設計思想(ポイント)

要点実装戦略
サイト別に構造が異なるサブフローに分離して疎結合化
DOM変更や読み込み遅延に耐えるテキスト出現 → DOM存在 → ネットワーク完了 の三段待機で設計
エラーで止まらないTry-Catch+ログ+次処理継続
横持ち集計で処理後の加工不要フロー内で1品番に1行の横展開集計構造

🛠 Power Automate Desktop フロー作成手順


✅ STEP1:品番一覧の読み込み

アクション:

  • 「Excelファイルからデータを読み取る(閉じた)」
  • パス:data/item_list.xlsx
  • 出力変数:ItemList

🔁 STEP2:1件ずつループ処理

アクション:For Each
配列:%ItemList%
現在の項目:CurrentItem
変数名:品番 ← %CurrentItem["品番"]%

🔍 STEP3:各社サイトで検索(サブフロー呼び出し)

構成:

サブフロー名検索対象サイト出力変数
SearchACompany.padxA社サイトAStock, APrice
SearchBCompany.padxB社サイトBStock, BPrice
SearchCCompany.padxC社サイトCStock, CPrice

引数(共通):

品番:%品番%

出力(共通):

  • 在庫:文字列または数値(例:20、在庫なし、–)
  • 価格:文字列(例:¥1,200、–)

🧷 STEP4:堅牢な待機処理(WaitForStableDOM)

各サイト共通の共通ユーティリティとして利用可能。

待機の3段階:

  1. テキストが表示されるまで待機(例:「検索結果」)
  2. DOM要素の存在を確認(セレクタで確認)
  3. ページの読み込み完了 or ネットワークアイドル状態を待つ(裏技)

🧾 STEP5:stock_price.xlsxへの横持ち追記

1行にするためのデータ構成:

["ABC123", AStock, APrice, BStock, BPrice, CStock, CPrice]

アクション:

  • 「Excelに行を追加」
  • ファイル:stock_price.xlsx
  • ヘッダー行あり、追記モード

❌ STEP6:失敗ログの出力(Try-Catch+WriteErrorLog)

Try-Catch内でサブフローを実行

  • エラー発生時:
    • 品番・サイト・エラーメッセージを error_log.csv に書き込む
    • 処理は中断せずに次のサイトまたは品番へ継続

書式:

2025/09/11 10:01,XYZ456,B社,価格取得セレクタが見つかりません

⚠️ セレクタ構成例(例:SearchACompany)

要素セレクタ例
検索窓input[name="searchBox"]
検索ボタンbutton[aria-label="検索"]
結果表示部div.product-list
在庫表示div.stock:has-text("在庫")
価格表示span.price:not(:empty)

✨ 補足Tips

🔄 サブフローの再利用設計

  • 引数を「品番」のみに統一
  • 出力を「在庫/価格」にすることで、使い回ししやすい構造

📶 UI読み込みのタイムアウト対策

  • すべての読み込み後に明示的な「待機3秒」などを追加
  • UI非応答時は「画像検出」や「タイマーによる強制分岐」も併用可

📦 通常在庫なし商品への対応

  • 「在庫:–」「価格:–」などで記録
  • セレクタが見つからない場合=在庫ゼロ判定も可能

✅ テストの手順

  1. item_list.xlsx に3〜5品番を入力
  2. 各サイトのサブフローで1つずつテスト
  3. 意図的にセレクタを壊してエラーログ保存の動作確認
  4. 最終的に stock_price.xlsx に行が追加されているか確認

❓ よくある質問(FAQ)


Q1. サイトのUIが変わって動かなくなったら?

A. サブフローごとに構成しているため、対象サイトのフローだけを修正すれば済みます。他の処理はそのままでOKです。


Q2. なぜ横持ちにするの?

A. 品番1件=1行でまとめることで、後続処理(在庫一覧・価格比較)が容易になるからです。


Q3. 途中で止まらないの?

A. すべての処理はTry-Catchで囲まれており、エラーは記録して処理は継続します。ログで後から原因確認も可能です。


Q4. 自動で時間指定起動したい

A. Windowsのタスクスケジューラにて、PADフローを毎朝起動可能です。

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

この記事を書いた人

目次