Power Automate Desktopの変数・条件・ループとエラー処理

公開 書いた人 大林 諒

Power Automate for desktop(Power Automate Desktop)で最初のフローが動いたあと、次に必ずぶつかるのが「毎回値が違う」「件数が月ごとに違う」「たまに画面が遅れて止まる」の3つです。これを片づけるのが変数・条件・ループ・エラー処理で、ここが分かると録画の延長だったフローが、毎月任せられるフローに変わります。この記事では、サンプル工務店の事務のパソコンで動かしている「発注一覧のExcelを読み、建材の発注サイト order.example に1件ずつ入力する」フローを例に、%変数%からIfの複数条件、ループ、エラー処理、サブフロー、カスタム フォームまでを、2026年10月時点のMicrosoft Learnで確かめて書きます。前提として、Power Automate for desktop をインストールし、空のフローを作って保存できるところまでは済んでいるものとします。

この記事の内容
  1. 先に決めること
  2. 変数・条件・ループ・エラー処理の一覧
  3. 変数の基本
  4. 条件:If・Else if・Switch
  5. ループ:Loop・For each・ループ条件
  6. エラー処理:止まらないフローにする
  7. サブフローで分けて読みやすくする
  8. 人に値を入れてもらう:入力ダイアログとカスタム フォーム
  9. 応用
  10. できないことと、その代わり
  11. よく詰まるところ
  12. 次にやること

先に決めること

アクションを並べる前に次の4つを決めます。決めずに作ると、変数名の付け替えやエラー処理の入れ直しになります。

1つ目は、変数の名前の付け方です。公式の決まりでは、変数名は英字かアンダースコアで始め、そのあとに英字・数字・アンダースコアを使います。大文字と小文字は区別されないので、OrderTable と ordertable は同じ変数として扱われます。if・loop・error・main などの予約語は使えません。サンプル工務店では、変数名は OrderTable(発注一覧の表)・CurrentRow(処理中の1行)・TargetMonth(対象月)のように英語で付け、Excelの列名は文字列として書くので日本語のまま使っています。

2つ目は、人が画面を見ながら動かす(有人)か、誰も見ていない時間に動かす(無人)かです。入力ダイアログやカスタム フォームは画面を表示できない状態では例外になるので、無人の予定があるなら、人に値を聞く部分は入力変数に置き換えられる形で作ります。

3つ目は、止まったときにどうしたいかです。既定では、1つのアクションでエラーが出るとその場で止まります。「1件失敗したら全部止める」か「失敗した行だけ飛ばして最後に知らせる」かを決めます。何十件も繰り返すフローは後者が運用では楽です。

4つ目は、どこで切ってサブフローにするかです。「Excelを読む」「ログインする」「1件入力する」「知らせる」のように、名前を付けて説明できる単位で切ります。

変数・条件・ループ・エラー処理の一覧

この記事で使うアクションと、それぞれを何に使うかを先に並べます。アクション名は日本語の画面の表示です。

分類アクション何に使うか
変数変数の設定値を入れる・上書きする
変数新しいリストの作成/項目をリストに追加失敗した行番号を貯める
条件If/Else if/Else条件で処理を分ける
条件Switch/Case/Default case1つの値を複数の候補と比べる
ループループ決まった回数だけ繰り返す
ループFor eachリストや表の行を1つずつ処理する
ループループ条件条件が成り立つ間だけ繰り返す
ループループを抜ける/次のループ途中で抜ける・その回だけ飛ばす
エラー処理各アクションの「エラー発生時」再試行・続行・変数の設定
エラー処理ブロック エラー発生時複数のアクションをまとめて守る
エラー処理最後のエラーを取得何が起きたかを記録・通知に使う
エラー処理フローを停止するエラーとして終わらせて呼び出し元に返す
整理サブフローの実行/サブフローの終了処理を分けて呼び出す
入力入力ダイアログを表示1つの値を入れてもらう
入力カスタム フォームの表示複数の値を1画面で入れてもらう

日本語の画面では「Else if」が「条件 1 は満たさないが条件 2 を満たす場合」、「Else」が「全ての条件を満たさない場合」、「For each」が「それぞれに対して」と出ることがあります。

変数の基本

%で囲むと変数になる

Power Automate for desktop では、パーセント記号で囲んだ部分が変数や式として計算されます。%TargetMonth% と書けば変数の中身に置き換わり、%OrderTable.RowsCount + 1% のように式も書けます。パーセント記号そのものを文字として使いたいときは %% と2つ重ねます。

%TargetMonth%
%'発注月: ' + TargetMonth%
%Amount * 1.1%

%の中で文字をそのまま書くときは引用符で囲みます。囲まないと変数名として読まれ、「変数が定義されていない」というデザイン時エラーになります。数値と文字を + でつなぐと、数値が文字に変わってつながります。

変数の作り方

変数は「変数の設定」アクションで作ります。

  1. 左のアクション ペインで「変数」を開く
  2. 「変数の設定」をワークスペースへドラッグする
  3. 変数名の欄(既定は NewVar)を TargetMonth に書き換える
  4. 値を入れる欄に 2026-10 と入れる
  5. 「保存」を押す
「変数の設定」アクションの設定画面。変数名の欄を TargetMonth に変え、値の欄に 2026-10 と入れたところ
「変数の設定」アクションの設定画面。変数名の欄を TargetMonth に変え、値の欄に 2026-10 と入れたところ

多くのアクションは結果を変数に出します。「Excel ワークシートから読み取る」なら読んだ表が、自動で名前の付いた変数に入ります。生成される変数の名前は設定画面の下の「生成された変数」で変えられるので、意味のある名前に変えておきます。

データ型

変数の型は中身から自動で決まります。小さな会社の業務フローでよく使うのは次の7つです。

型中身の例作り方中身の取り出し方
テキスト値株式会社サンプル建材変数の設定に文字を入れる%Supplier%・%Supplier.Length%
数値125000変数の設定に数字を入れる%Amount * 1.1%
ブール値True/False変数の設定に %True%条件にそのまま使う
日時2026年10月31日%d"2026-10-31"%%Today.Month% など
リスト[3, 7, 12]新しいリストの作成%FailedRows[0]%・%FailedRows.Count%
データ テーブルExcelの表Excel ワークシートから読み取る%OrderTable[0]['金額']%・%OrderTable.RowsCount%
カスタム オブジェクト{'仕入先': 'A社', '金額': 1000}%{'仕入先': 'A社'}%%Info['仕入先']%

リストとデータ テーブルの番号は0から始まります。表の1行目は %OrderTable[0]%、1行目の2列目は %OrderTable[0][1]% です。列名がある表は %OrderTable[0]['金額']% のように列名で取り出せます。列の順番が変わっても壊れないので、Excelから読んだ表は列名で取り出すほうが安全です。

データ テーブルは「変数の設定」で配列の書き方でも作れます。1行目を ^[...] にすると列名になります。

%{^['品番', '品名', '数量'], ['A-100', '石膏ボード', 20], ['B-200', '断熱材', 8]}%

For each でデータ テーブルを回すと、1回ごとの変数は「データ行」という型になり、%CurrentRow['数量']% のように列名で値を取り出せます。

変数ペインと値の確かめ方

右側の変数ペインには、フローで使っている変数が「フロー変数」として並び、実行すると今の値が名前の横に出ます。名前をダブルクリックすると変数値ビューアーが開き、データ テーブルなら中身を表で見られます。

変数ペインでOrderTableをダブルクリックして開いた変数値ビューアー。Excelから読んだ発注一覧が表で表示されているところ
変数ペインでOrderTableをダブルクリックして開いた変数値ビューアー。Excelから読んだ発注一覧が表で表示されているところ

途中で止めて値を見たいときはブレークポイントを置きます。止まったところで変数値ビューアーを開くと、テキスト・数値・日時・ブール値はその場で書き換えて続きを試せます。名前は変数ペインの右クリックの「名前の変更」で、使っている場所ごと書き換わります。既にある名前に変えると2つの変数のマージを聞かれるので、意図しないときは取り消します。

機密の変数

パスワードのような値は、変数ペインで右クリックして「機密としてマーク」を選ぶと、デバッグ中は伏せて表示され、組織のプレミアム アカウントでコンソールやクラウドフローから実行したときは実行履歴にも残りません。ただし「変数の設定」に直接書いたパスワードはフローの定義の中で見えてしまうので、フローの中には書かず入力変数で渡します。

条件:If・Else if・Switch

Ifの基本

「If」は、最初のオペランド・演算子・2番目のオペランドの3つで条件を作ります。演算子は「と等しい (=)」「と等しくない (<>)」「より大きい (>)」「以上である (>=)」「より小さい (<)」「以下である (<=)」「含む」「含まない」「空である」「空ではない」「で始まる」「で始まらない」「で終わる」「で終わらない」「空白である」「空白ではない」から選びます。

  1. アクション ペインで「条件」を開き、「If」をドラッグする
  2. 「最初のオペランド」に %CurrentRow['状態']% と入れる
  3. 「演算子」で「と等しい (=)」を選ぶ
  4. 「2 番目のオペランド」に 未発注 と入れる
  5. 「保存」を押す。「If」と「End」の間に、条件が成り立ったときのアクションを入れる
Ifアクションの設定画面。最初のオペランドに %CurrentRow['状態']%、演算子に「と等しい (=)」、2番目のオペランドに「未発注」を入れたところ
Ifアクションの設定画面。最初のオペランドに %CurrentRow[‘状態’]%、演算子に「と等しい (=)」、2番目のオペランドに「未発注」を入れたところ

複数条件はAND・ORで1つのIfに書く

検索でいちばん聞かれるのがここです。「状態が未発注で、かつ数量が1以上」のように条件が2つ以上あるとき、Ifを入れ子にしてもよいのですが、3つ以上になると読めなくなります。公式が勧めているのは、最初のオペランドに論理式を書き、演算子を「と等しい (=)」、2番目のオペランドを True にする書き方です。

最初のオペランド: %CurrentRow['状態'] = '未発注' AND CurrentRow['数量'] >= 1%
演算子: と等しい (=)
2 番目のオペランド: True

使える論理演算子は AND・OR・NOT で、括弧で順番を変えられます。サンプル工務店では、「未発注で数量が1以上、かつ仕入先が空でない」を次のように1行で書いています。

%CurrentRow['状態'] = '未発注' AND CurrentRow['数量'] >= 1 AND NOT(CurrentRow['仕入先'] = '')%

文字の判定には Contains・StartsWith・EndsWith・IsEmpty などの関数も使えます。3つ目の引数は大文字と小文字を区別しないかどうかです。

%Contains(CurrentRow['品名'], 'ボード', True) OR StartsWith(CurrentRow['品番'], 'A-', True)%

比べられるのは同じ型どうしだけです。Excelから読んだ数量が文字で入っていると >= 1 がエラーになるので、「テキストを数値に変換」で数値にしてから比べます。

Else ifとElse

成り立たなかったときの分かれ道は、Ifの中に「Else if」と「Else」を足して作ります。上から順に判定され、最初に成り立ったところだけが実行されます。

Switch

1つの値を複数の候補と比べるときは、IfとElse ifを重ねるより「Switch」が読みやすくなります。サンプル工務店では、仕入先によって発注サイトの入力画面が違うので、仕入先区分で分けています。

  1. 「Switch」をドラッグし、「チェックする値」に %CurrentRow['仕入先区分']% と入れる
  2. 「Switch」の中に「Case」を置き、演算子「と等しい (=)」、比較する値に 建材 と入れる
  3. 同じように 設備・住設 の「Case」を足す
  4. 最後に「Default case」を置き、どれにも当たらなかった行の処理(失敗リストに足すなど)を入れる
Switchの中にCase(建材・設備・住設)とDefault caseが並んだワークスペース
Switchの中にCase(建材・設備・住設)とDefault caseが並んだワークスペース

Default caseは空にしません。新しい区分が足されたときに素通りするのが、いちばん気づきにくい失敗です。

ループ:Loop・For each・ループ条件

3つの使い分け

ループ繰り返し方自動で作られる変数向く場面
ループ開始値から終了まで増分ずつ回数の番号決まった回数・行番号で回す
For eachリスト・表の行を1つずつ今の項目Excelの行・フォルダのファイル
ループ条件条件が成り立つ間なし画面が出るまで待つ・残りがある間

業務フローではFor eachがほとんどです。

For eachで表を1行ずつ処理する

  1. 「Excel ワークシートから読み取る」で発注一覧を読み、生成された変数を OrderTable にする
  2. アクション ペインで「ループ」を開き、「For each」をドラッグする
  3. 「反復処理を行う値」に %OrderTable% と入れる
  4. 「保存先」の変数名を CurrentRow に変える
  5. 「For each」と「End」の間に、Ifと入力のアクションを入れる
For eachの設定画面。反復処理を行う値に %OrderTable%、保存先に CurrentRow を入れたところ
For eachの設定画面。反復処理を行う値に %OrderTable%、保存先に CurrentRow を入れたところ

行番号も一緒に使いたいとき(Excelの何行目に結果を書き戻すか等)は、For eachの前に「変数の設定」で RowNo を 2 にしておき、For eachの最後で「変数を大きくする」で1ずつ増やします。見出しが1行目なので、データの1行目はExcelの2行目です。

ループ(回数)とループ条件

「ループ」は開始値・終了・増分を数値で入れます。%OrderTable.RowsCount - 1% を終了にして0から回せば、表の行番号で回せます。「ループ条件」は「完了画面が出るまで、最大10回待つ」のような待ち合わせに使います。演算子は等しい・大小の比較の6種類だけで、「含む」などは使えません。

ループ条件は、条件がずっと成り立つと終わらない無限ループになります。必ず回数の変数を一緒に増やし、上限を超えたら「ループを抜ける」で抜ける形にしておきます。途中の1回だけを飛ばしたいときは「次のループ」を使います。

エラー処理:止まらないフローにする

2種類のエラー

デスクトップフローのエラーは2種類です。必須の欄が空、未定義の変数、といったデザイン時エラーはエラー ペインに出て、直すまで実行できません。もう1つが実行時エラー(例外)で、ファイルが無い・画面の要素が見つからない、のように動かして初めて起きます。エラー処理で守るのはこちらです。

1つのアクションを守る「エラー発生時」

各アクションの設定画面の左下にある「エラー発生時」を押すと、そのアクションだけのエラー処理を決められます。

  1. 発注サイトの入力欄に文字を入れるアクションを開く
  2. 左下の「エラー発生時」を押す
  3. 「エラーが発生した場合は、アクションを再試行する」にチェックを入れ、回数を 3、間隔を 5 秒にする
  4. 「フローの実行を継続する」を選び、「次のアクションに進む」を選ぶ
  5. 「新しいルール」から「変数の設定」を選び、RowFailed に %True% を入れる
  6. 「保存」を押す
アクションの「エラー発生時」画面。再試行3回・5秒、フローの実行を継続する、新しいルールで変数の設定が入っているところ
アクションの「エラー発生時」画面。再試行3回・5秒、フローの実行を継続する、新しいルールで変数の設定が入っているところ

既定の再試行は1回・2秒です。Webの画面は表示の遅れで一度だけ失敗することが多く、再試行を入れるだけで止まる回数がかなり減ります。続行のしかたは次の3つです。

選択肢動き使う場面
次のアクションに進む失敗したまま次へ進む失敗を変数に記録して後でまとめて扱う
アクションの繰り返し成功するまで繰り返す必ず成功するはずの待ちだけ(無限に回る危険あり)
ラベルに進む「ラベル」の位置へ飛ぶ失敗時の後始末の場所へ飛ばす

「新しいルール」では「変数の設定」と「サブフローの実行」が選べます。エラーの種類ごとに違う処理をしたいときは「詳細」で1つずつ決められます。

まとめて守る「ブロック エラー発生時」

1件分の入力が10アクションあるとき、全部に同じ設定をするのは手間です。「ブロック エラー発生時」で囲むと、中のアクションをまとめて守れます。

  1. アクション ペインの「フロー コントロール」から「ブロック エラー発生時」をドラッグする
  2. 「名前」に 1件入力 と入れる
  3. 「再試行ポリシー」を「固定」にして回数と間隔を決める
  4. エラー処理で「フローの実行を継続する」を選び、ブロックの末尾から続けるようにする
  5. 「新しいルール」で「サブフローの実行」を選び、失敗を記録するサブフロー 記録_失敗 を指定する
  6. 1件分の入力アクションを「ブロック エラー発生時」と「End」の間に移す
For eachの中に「ブロック エラー発生時(1件入力)」があり、その中に発注サイトへの入力アクションが並んでいるワークスペース
For eachの中に「ブロック エラー発生時(1件入力)」があり、その中に発注サイトへの入力アクションが並んでいるワークスペース

ブロックの再試行は、エラーが起きたアクションからではなくブロックの最初からやり直します。入力の途中で失敗したときに、最初の画面から入れ直せるのは都合がよい反面、途中まで登録が進んでいると二重登録になります。発注サイトのように「登録」ボタンを押したら取り消せない処理は、登録ボタンの直前までをブロックに入れ、登録ボタンは外に出しておくのが安全です。ブロックの中のアクションに個別のエラー処理があると、そちらが優先されます。

「フロー終了エラーの処理」をオンにすると、0で割った・表の範囲外の行を取り出した、といった誤りも捕まえられます。「カスタム エラーのスロー」で「金額が0円」のような業務上のおかしさを自分でエラーにして、ブロックで受けることもできます。

何が起きたかを残す

「最後のエラーを取得」を置くと、直前のエラーが LastError という変数に入ります。%LastError.ActionName%(失敗したアクション名)・%LastError.Location%(サブフローと行)・%LastError.Message%(メッセージ)を、失敗した行番号と一緒にリストやテキストファイルに書いておくと、翌朝見たときに何が起きたかが分かります。「エラーを削除する」をオンにすると、取得したあとにエラーが消え、次に取得したときに同じエラーを拾い直さずに済みます。

最後に失敗が1件でもあったらエラーとして終わらせたいときは、「フローを停止する」で「エラーメッセージ付き」を選び、失敗した行の一覧をメッセージに入れます。クラウドフローから呼び出している場合、このメッセージが呼び出し元に返るので、Teamsへの通知に使えます。

サブフローで分けて読みやすくする

どのフローにも、起動したときに自動で動く「Main」というサブフローがあります。処理が50行を超えたら、意味の単位で別のサブフローに分けます。

  1. ワークスペースの上のサブフローのタブで「+」を押す
  2. サブフロー名に 読込_発注一覧 と入れて作る
  3. Mainから「Excel ワークシートから読み取る」などを切り取り、新しいサブフローに貼り付ける
  4. Mainに「サブフローの実行」を置き、「サブフロー名」で 読込_発注一覧 を選ぶ
サブフローのタブに Main・入力_条件・読込_発注一覧・ログイン_発注サイト・入力_1件・記録_失敗・通知_結果 が並び、Mainには「サブフローの実行」だけが並んでいるところ
サブフローのタブに Main・入力_条件・読込_発注一覧・ログイン_発注サイト・入力_1件・記録_失敗・通知_結果 が並び、Mainには「サブフローの実行」だけが並んでいるところ

サンプル工務店のMainは「サブフローの実行」が6行並ぶだけです。Mainを読めば流れが分かり、直す場所もすぐ分かります。

順サブフロー中身
1入力_条件カスタム フォームで対象月と本番かテストかを聞く
2読込_発注一覧Excelを読み、未発注の行だけに絞る
3ログイン_発注サイトブラウザを開いてログインする
4入力_1件(For eachの中で呼ぶ)1行分を入力する
5記録_失敗失敗した行と理由を貯める
6通知_結果成功件数と失敗一覧を出し、ブラウザを閉じる

サブフローの途中で戻りたいときは「サブフローの終了」を使います。変数は既定ではフロー全体で共通なので、OrderTable はどのサブフローからでも読めます。2026年10月時点では、サブフローを作るときにスコープを「ローカル」にすると、そのサブフローの中だけで使える変数にもできます。ローカルにしたサブフローには専用の入力変数と出力変数を作り、「サブフローの実行」で値を渡して結果を受け取ります。ローカルのサブフローから全体の変数を使うときは global. が付いた名前になります。スコープは作ったあとで変えられず、Mainは常に全体(グローバル)です。小さな会社の業務フローなら、まずは全部グローバルで作り、同じ処理を何か所からも呼ぶものだけローカルにすれば十分です。

人に値を入れてもらう:入力ダイアログとカスタム フォーム

1つだけ聞くなら入力ダイアログ

「入力ダイアログを表示」は、タイトルとメッセージを出して1つの値を入れてもらうアクションです。入力タイプは「単一行」「パスワード」「複数行」から選べ、入力された文字は UserInput、押したボタンは ButtonPressed に入ります。ButtonPressed の値は、画面の言語に関係なく英語の OK か Cancel です。キャンセルされたら止めるIfを必ず直後に置きます。

最初のオペランド: %ButtonPressed%
演算子: と等しい (=)
2 番目のオペランド: Cancel

日付なら「日付選択ダイアログを表示する」、候補から選んでもらうなら「リストからの選択ダイアログを表示」、ファイルなら「ファイル選択ダイアログを表示する」が使えます。知らせるだけなら「メッセージを表示」で、「メッセージボックスを自動で閉じる」をオンにすると決めた秒数で閉じて先へ進みます。

複数の値を1画面で聞くならカスタム フォーム

対象月・担当者・テスト実行かどうか、のように3つ以上聞きたいときに、ダイアログを3回出すのは使う人に不親切です。「カスタム フォームの表示」なら1画面にまとめられます。カスタム フォームはアダプティブ カードの仕組みで作られています。

  1. アクション ペインの「メッセージ ボックス」から「カスタム フォームの表示」をドラッグする
  2. 「カスタム フォーム デザイナー」を押す
  3. 左の一覧から「日付入力」をダブルクリックし、右のプロパティでIDを TargetDate、ラベルを 発注の対象月の1日 にする
  4. 「選択肢セットの入力」を足し、IDを Staff、選択肢に 事務B・事務D を入れ、「検証が必要」をオンにする
  5. 「切り替え入力」を足し、IDを IsTest、タイトルを テスト実行(登録ボタンを押さない) にする
  6. 末尾に「送信」を足し、IDを Run、タイトルを 実行 にする
  7. もう1つ「送信」を足し、IDを Cancel、タイトルを やめる にして「指定した入力を無視する」をオンにする
  8. 下のプレビューで見た目を確かめ、デザイナーを閉じて保存する
カスタム フォーム デザイナー。左に要素の一覧、中央に日付入力・選択肢セット・切り替え入力・送信ボタン2つが並び、下にプレビューが出ているところ
カスタム フォーム デザイナー。左に要素の一覧、中央に日付入力・選択肢セット・切り替え入力・送信ボタン2つが並び、下にプレビューが出ているところ

入力された値は CustomFormData というカスタム オブジェクトに入り、%CustomFormData['TargetDate']% のようにIDで取り出します。押したボタンのIDは ButtonPressed に入るので、%ButtonPressed% = Cancel なら止める、とIfで分けます。

ここで詰まりやすいのがIDの決まりです。IDは重複も空も不可で、英字で始まり、英字・数字・スペースだけが使えます。日本語のIDは使えず、無効なIDを入れたまま閉じると、最後に使った有効なIDに戻されます。ラベルやタイトルは日本語で問題ありません。また、「送信」などのボタンはフォームの末尾にしか置けません。

フローを実行して表示されたカスタム フォーム。対象月の日付・担当者の選択・テスト実行の切り替え・実行とやめるのボタンが並んでいるところ
フローを実行して表示されたカスタム フォーム。対象月の日付・担当者の選択・テスト実行の切り替え・実行とやめるのボタンが並んでいるところ

応用

入力変数に置き換えて、クラウドフローからも動かせるようにする

人に聞いていた値を、変数ペインの「+」から「入力」で作る入力変数に置き換えると、クラウドフローから値を渡して動かせるようになります。入力変数には「変数名」「データ型」「外部名称」が必須で、外部名称がクラウドフローのデザイナーに表示される名前です。サンプル工務店では、TargetMonth(テキスト)と IsTest(ブール値)を入力変数にし、カスタム フォームは「入力変数が空のときだけ出す」ようにして、手で動かすときと自動で動かすときの両方に1本で対応しています。入力変数を「オプションとしてマーク」にすると、値が渡されないときは空白になるので、この判定に使えます。

最初のオペランド: %TargetMonth%
演算子: 空白である

結果を返したいときは出力変数を作り、成功件数や失敗した行の一覧を入れておきます。

失敗した行だけを最後にまとめて知らせる

For eachの前に「新しいリストの作成」で FailedRows を作り、エラー処理のサブフロー 記録_失敗 で「項目をリストに追加」を使って %'行' + RowNo + ': ' + LastError.Message% を足していきます。最後に %FailedRows.Count% > 0 ならメッセージやメールで一覧を出し、0なら「全件入力しました」と出します。事務の人が翌朝にExcelと発注サイトを突き合わせる手間がなくなります。

できないことと、その代わり

やりたいことPower Automate Desktopでの実情代わりの手
何千行・何万行を速く処理したい1行ずつ画面やExcelを操作するので時間がかかるExcel側の関数・ピボット、データはSharePoint リストやDataverseに置きクラウドフローで処理
無人のときに人に値を聞きたい画面を表示できないとダイアログは例外になる入力変数で渡す。承認はクラウドフローの承認で受ける
細かい分岐が数十ある判定表IfとSwitchが長くなり読めなくなる判定表をExcelに持たせて引く。複雑なら専用のシステムを検討
複雑な文字の加工や計算アクションの組み合わせでは手数が多いスクリプトのアクション(PowerShell・VBScript等)で短く書く。ただし直せる人を決めてから
Microsoftの外のWebサービス同士を毎日つなぐ画面操作でつなぐと画面の変更で止まるAPIがあればクラウドフローのHTTPや、n8nなどの連携ツールのほうが安定する

2026年10月時点では、Power Fx で書くデスクトップフロー(プレビュー)もあり、式の書き方が%表記と違います。業務で使うフローはこの記事の%表記で作るのが無難です。

よく詰まるところ

症状原因直し方
変数が定義されていないと出る%の中の文字を引用符で囲んでいない/変数名の打ち間違い文字は '...' で囲む。変数名は変数ペインから選んで入れる
Ifで型が違うというエラーExcelの数値が文字として入っている「テキストを数値に変換」してから比べる
複数条件のIfが常に成り立たない2番目のオペランドを空にしている演算子を「と等しい (=)」、2番目のオペランドを True にする
表の1行目が取れない・1行ずれる番号が0から始まることを忘れている1行目は [0]。Excelの行番号とは見出しの1行分ずれる
For eachで列名が使えないExcelを読むときに先頭行を列名として読んでいない「Excel ワークシートから読み取る」の詳細で「範囲の最初の行に列名が含まれます」をオンにする
ループ条件が終わらない条件がずっと成り立っている回数の変数を増やし、上限で「ループを抜ける」
再試行で二重登録になったブロックの再試行が最初からやり直した取り消せない「登録」はブロックの外に出す
キャンセルしても先へ進むButtonPressed を日本語の「キャンセル」と比べている値は英語の Cancel と比べる
カスタム フォームのIDが勝手に戻るIDに日本語や記号を使ったIDは英字で始め、英字・数字・スペースだけにする
無人で動かしたらダイアログのところで失敗非インタラクティブ モードではダイアログを表示できない入力変数に置き換え、空のときだけダイアログを出す

次にやること

変数・条件・ループ・エラー処理が分かったら、実際の業務の操作に当てはめます。インストールや最初のフローの保存がまだなら「Power Automate Desktopの使い方:インストールから最初のフローまで」から始めてください。Excelの読み取りと書き戻しの細かい設定は「Power Automate DesktopでExcel操作:転記と集計を自動にする」、発注サイトのようなWebの画面への入力は「Power Automate Desktopでブラウザ操作:Webの画面への入力とデータの取得」で書いています。入力変数を作ったフローを毎朝や月末に自動で動かすなら「Power Automate Desktopのスケジュール実行:クラウドフローから動かす・無人で動かす」に進みます。

あわせて読む