Power Automateで条件分岐が期待通りに動作しないことは、フロー作成者であれば一度は経験する悩みです。条件式を正しく設定したつもりでも、実行結果が想定と異なるケースは珍しくありません。原因はデータ型の不一致や式の記述ミス、トリガーのタイミングなど多岐にわたります。本記事では、条件分岐が動かない原因を体系的に切り分け、具体的な修正手順を解説します。これにより、フローのデバッグがスムーズに進み、問題解決の時間を大幅に短縮できます。
【要点】この記事で確認すること
- 最初に見る場所: フローの実行履歴で各アクションの入力と出力を確認し、実際のデータが何であるかを把握します。
- 切り分けの軸: 条件式の記述ミス、データ型の不一致、トリガーのタイミング、権限やコネクタ設定の4つで原因を分類します。
- 注意点: 条件式で動的コンテンツや式を直接編集する場合は、構文エラーが発生しやすいため、デバッグモードで一つずつ確認してください。
ADVERTISEMENT
条件分岐が動かない主な原因
条件分岐が期待通りに動作しない原因は、大きく以下のカテゴリに分類されます。まずは全体像を把握し、自分の状況に当てはめながら読み進めてください。
1. データ型の不一致
Power Automateでは、文字列、数値、ブール値、日付などさまざまなデータ型が存在します。たとえば、SharePointの列が「選択肢」型でテキストとして返されるのに対し、比較相手が数値や別の型だと、条件式は常にFalseになります。特に動的コンテンツをそのまま使うと、元のデータ型が予想と異なることがあります。
2. 条件式の記述ミス
式エディタで直接記述する際に、括弧の閉じ忘れや演算子の誤り、関数名のタイポが発生しやすいです。また、AND/ORの結合順序を正しく指定しないと、意図しない評価結果になります。
3. トリガーのタイミングやデータ取得の失敗
トリガーが適切なタイミングで起動していない、または前のアクションでデータが正しく取得できていないと、条件分岐に渡される値が空や予期しない値になります。実行履歴で各アクションの出力を確認することが重要です。
4. 環境設定や権限の問題
コネクタの接続設定が切れている、SharePointリストの列の型設定が想定と異なる、または環境のデータ損失防止(DLP)ポリシーで特定の操作が制限されている場合も、条件分岐に影響します。
確認手順:まずチェックすべきポイント
問題を切り分けるために、以下の手順を順番に実施してください。手順通りに行うことで、原因を効率的に特定できます。
- 実行履歴を確認する: フローを実行した後に表示される「実行」タブから、該当の実行を開きます。各アクションの「入力」と「出力」を確認し、条件分岐に渡された値が期待通りかチェックしてください。特に「条件」アクションの出力には、評価結果がTrue/Falseで表示されるので、それが正しいかどうかを最初に確認します。
- デバッグモードを有効にする: フローの編集画面で「テスト」をクリックし、「手動」または「自動」のテストを実行します。テスト中は各アクションの結果がリアルタイムで表示されるため、どの時点でデータがずれているかを追跡できます。特に条件式を修正した後は、必ずテスト実行して結果を確認してください。
- 条件式を分解して再現する: 複雑な条件式の場合、単純な比較(例:「値が10と等しい」)に書き換えてテストします。単純な条件で正しく動作するなら、元の条件式の論理結合や関数に問題がある可能性が高いです。一つずつ要素を追加して、どこで壊れるかを特定します。
- データ型を明示的に変換する: 動的コンテンツを条件式に使う際は、式タブで「int()」「string()」「bool()」などの変換関数を使って明示的に型を合わせます。例えばSharePointの数値列を比較する場合は「int(items(‘Apply_to_each’)?[‘数値列’])」のように記述すると、型の不一致を防げます。
- 別のアプローチで検証する: 条件分岐の代わりに「スイッチ」アクション(複数条件の場合)や「条件の並列分岐」を使って同様のロジックを組み、動作を比較します。同じ結果になるならロジック自体は正しく、条件式の書き方に問題があると判断できます。
データ型と条件式の一致確認
条件分岐の成否を左右する最大の要因がデータ型です。以下のテーブルに、よくある型の組み合わせと注意点をまとめました。
| 比較対象の例 | 推奨する記述方法 | よくある間違い |
|---|---|---|
| SharePointの数値列 vs 固定数値10 | int(items('Apply_to_each')?['数値列']) == 10 |
文字列として比較すると「”10″ == 10」がFalseになる |
| SharePointの日付列 vs 今日の日付 | formatDateTime(items('Apply_to_each')?['日付列'], 'yyyy-MM-dd') == formatDateTime(utcNow(), 'yyyy-MM-dd') |
タイムゾーンや時刻部分まで含めて比較してしまい不一致になる |
| トリガーからの値が空かどうか | empty(triggerBody()?['フィールド名']) |
「== null」や「== ”」だけでは空白文字列や空オブジェクトに対応できない |
| 複数条件(AND/OR) | and(greater(items('Apply_to_each')?['数値'], 5), less(items('Apply_to_each')?['数値'], 20)) |
カンマや括弧の位置を誤って構文エラーになる |
条件式を記述する際は、式エディタのオートコンプリート機能を活用し、関数名やパラメータを正確に入力してください。また、動的コンテンツを選択した後に「式」タブに切り替えると、自動で式が構築される場合がありますが、意図した型になっているとは限らないので注意が必要です。
失敗パターンとその対処法
実際によくある失敗パターンをいくつか紹介します。自分の状況に当てはまるものがあれば、該当する対処法を試してください。
パターン1:条件式が常にFalseになる
原因として、データ型の不一致、値が空である、または条件式の構文エラーが考えられます。対処法として、まず実行履歴で条件分岐の入力値を確認し、値の型と内容を正確に把握してください。たとえば、入力値が「”10″」なのか「10」なのかを確認し、文字列であればint()で数値に変換します。また、条件式を単純な比較(例:1 == 1)に置き換えてテストし、それでもFalseになる場合はフロー自体の設定に問題がある可能性があります。
パターン2:一部のケースでだけ条件が合わない
特定のデータでだけ条件が正しく評価されない場合、そのデータに特殊な空白や改行、大文字小文字の違いが含まれている可能性があります。対処法として、trim()で前後の空白を除去し、toLower()やtoUpper()で大文字小文字を統一します。また、SharePointの選択肢列で「(空白)」というオプションがある場合は、空文字列ではなく「(空白)」という文字列として扱われるため、注意してください。
パターン3:条件の順序が期待と逆になる
条件分岐で「はい」と「いいえ」の分岐が逆転してしまう場合、条件式の否定(not())の使い方や、AND/ORの結合順序が原因です。たとえば、and(A, B)の結果を否定する場合はnot(and(A, B))と記述する必要があります。対処法として、条件式を日本語で書き出し、論理演算子の優先順位(NOT > AND > OR)を意識しながら再構築してください。また、Power Automateの条件ビルダーで視覚的に設定すると、誤解が減ります。
管理者に確認すべき設定項目
フローの条件分岐がどうしても解決しない場合、システム管理者に以下の項目を確認してもらう必要があります。これらはユーザー側で変更できない設定のため、管理者の協力が不可欠です。
- コネクタの接続状態: SharePointやSQL Serverなど、使用しているコネクタの接続が有効かどうかを管理センターで確認します。接続が切れていると、データ取得そのものが失敗します。
- データ損失防止(DLP)ポリシー: 環境に適用されているDLPポリシーにより、特定のコネクタやアクションがブロックされている場合があります。条件分岐で使用しているデータソースがポリシーの対象外かどうかを確認してください。
- SharePointリストの列設定: 列の型が「1行テキスト」なのか「数値」なのか、また「計算列」の戻り値の型が想定と合っているかどうかを管理者が確認できます。
- 環境のリージョンと言語設定: 日付の書式や小数点の区切り文字が地域設定に依存するため、フローの作成者と実行環境で設定が異なる場合に想定外の結果になることがあります。
管理者に依頼する際は、具体的なフローのIDや実行履歴のスクリーンショット、期待する動作と実際の動作を明確に伝えるとスムーズです。
よくある質問(FAQ)
Q1: 条件分岐で複数の条件を指定したい場合、どのように記述すればよいですか?
条件ビルダーで「かつ(AND)」や「または(OR)」を選択することで、複数の条件を追加できます。式エディタで直接記述する場合は、and(条件1, 条件2)またはor(条件1, 条件2)のように記述し、さらにネストすることも可能です。ただし、複雑になりすぎると可読性が低下するため、適宜「スイッチ」アクションや入れ子の条件分岐を検討してください。
Q2: 条件式でnullや空をチェックするにはどうすればいいですか?
Power Automateにはempty()関数が用意されています。これを使うと、空文字列、空の配列、nullをまとめてチェックできます。たとえば、empty(items('Apply_to_each')?['フィールド名'])と記述すれば、そのフィールドが空かどうかを判定できます。より厳密にnullだけをチェックしたい場合は、equals(items('Apply_to_each')?['フィールド名'], null)と記述しますが、SharePointの列はnullではなく空文字列が返されることが多いため注意してください。
Q3: 条件分岐の結果をデバッグする方法はありますか?
最も確実な方法は、条件分岐の直後に「スコープ」アクションを追加し、その中で「変数の設定」や「メール送信」などを使って条件の評価結果を出力することです。たとえば、条件がTrueの場合にのみ「条件True」というメッセージを送信するようにすれば、実行履歴を確認するよりも直感的に動作を検証できます。
まとめ
Power Automateの条件分岐が思った通り動かない場合、まず実行履歴で実際のデータを確認し、データ型と条件式の整合性を検証することが基本です。単純な条件から順にテストし、必要な場合は型変換関数や空チェック関数を活用してください。それでも解決しない場合は、管理者に環境設定を確認してもらうことも視野に入れましょう。日頃からフローを小さな単位でテストし、変更履歴を管理することで、トラブル発生時の切り分けが容易になります。本記事がスムーズなフロー開発の一助となれば幸いです。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
