Power Automateで条件分岐を設定しても、期待した分岐先に進まなかったり、フローが停止したりすることがあります。この問題の原因は、多くの場合、条件式の記述ミスやデータ型の不一致、実行環境の設定にあります。本記事では、実行履歴と設定値を確認することで、原因を特定し、適切な修正を行う手順を詳しく解説します。特に、実際の業務で遭遇しやすい失敗パターンとその対処法に焦点を当てます。
【要点】この記事で確認すること
- 最初に見る場所: Power Automateの実行履歴詳細画面(各アクションの入力・出力タブ)
- 切り分けの軸: 条件式の構文、データ型の一致、タイムゾーン・ロケール、トリガーで受け取った値の実際の内容
- 注意点: 動的コンテンツの値を直接条件式に使う前に、出力で値を確認する。組織のポリシー(DLPなど)によっては一部のアクションが制限される可能性があるため、管理者に確認が必要です。
ADVERTISEMENT
目次
1. 条件分岐が想定どおり進まない主な原因
条件分岐が期待と異なる動作をする原因は、いくつかのカテゴリに分類できます。最も多いのは、条件式で使用するデータの型が想定と異なるケースです。例えば、Excelのセルの値が数値として取得されると思っていたら文字列として扱われていたり、日付の形式が異なることで比較が正しく行われないことがあります。
1.1 データ型の不一致
Power Automateでは、条件式内で比較する値のデータ型が厳密にチェックされます。たとえば、数値の「100」と文字列の「100」は異なる値として扱われます。また、nullと空文字(”)も区別されるため、条件式で「empty」関数を使う際に注意が必要です。動的コンテンツから取得した値がどの型で渡されているかは、実行履歴の出力タブで確認できます。
1.2 条件式の記述ミス
条件式の構文は、Microsoftの式言語に従う必要があります。よくあるミスとして、等号の代わりに「==」を使ってしまう、論理演算子「and」「or」の大文字小文字を間違える、関数名のスペルミスなどがあります。また、動的コンテンツのIDが正しく挿入されているかも確認すべきポイントです。
1.3 タイムゾーンやロケールの違い
日付や時刻の比較を行う際、タイムゾーンの違いが原因で条件が成立しないケースがあります。Power Automateの既定のタイムゾーンはUTCですが、フローが実行される地域の設定によってはローカル時間が使われることもあります。日付の書式(月/日/年 と 日/月/年 など)もロケールに依存するため、文字列として日付を比較する場合は特に注意が必要です。
2. 実行履歴でフローの挙動を確認する手順
条件分岐の問題を切り分けるには、まず実行履歴で各アクションの入力値と出力値を確認します。以下の手順で詳細を確認できます。
- Power Automateポータル(make.powerautomate.com)にアクセスし、左メニューから「マイ フロー」を選択します。
- 問題が発生しているフローをクリックして詳細画面を開きます。「実行履歴」タブを選択し、最新の失敗または異常な実行をクリックします。
- 実行の詳細画面が表示されます。各アクションの「入力」と「出力」のタブを確認します。特に条件アクションでは、条件式に入力された値が正しいかをチェックします。
- 条件アクションの「出力」タブで「結果」フィールドにtrueまたはfalseが表示されます。この値が想定と異なる場合、その前のアクションで渡された値に問題がある可能性が高いです。
- 必要に応じて、条件アクションより前のアクション(トリガーやデータ取得アクション)の出力を確認し、データ型や値を検証します。アクションの上にある「…」メニューから「出力を表示」を選択することもできます。
- 動的コンテンツに式を直接記述している場合は、式エディタで式を再確認し、関数名やパラメータに誤りがないかチェックします。
3. 条件式と設定値の詳細な確認方法
実行履歴の確認だけでは原因が特定できない場合、条件式の内部で使用される値や関数の動作を詳細に調べる必要があります。
3.1 動的コンテンツの値の確認
条件式で使用している動的コンテンツ(例:@triggerBody()?[‘field’])は、実行時に実際にどのような値になるかを、フロー内の一時変数に格納して確認する方法があります。例えば、「変数の初期化」アクションで動的コンテンツを文字列変数に代入し、その変数を出力として記録することで、値の全体像を把握できます。また、JSONのパースが必要な場合は「JSONの解析」アクションを使用すると構造が明確になります。
3.2 関数の使い方と落とし穴
Power Automateの条件式では、多くの組み込み関数が利用できますが、それぞれの挙動を正しく理解していないと期待と異なる結果になります。以下の表に、よく使われる関数とその注意点をまとめます。
| 関数 | 使用例 | 注意点 |
|---|---|---|
| equals | equals(変数, ‘値’) | 大文字小文字を区別します。数値と文字列は別物として扱われます。 |
| empty | empty(変数) | null、空文字、空の配列/オブジェクトでtrueを返します。数値の0はfalseになります。 |
| contains | contains(変数, ‘部分文字列’) | 文字列の部分一致または配列の要素有無をチェックします。大文字小文字を区別します。 |
| less | less(数値1, 数値2) | 引数が数値である必要があります。文字列が渡されるとエラーになります。 |
| and/or | and(条件1, 条件2) | 式言語のand/orは小文字で指定します。大文字(AND)は認識されません。 |
また、条件式の中で直接「@」記号を使って式を書く場合は、エスケープや引用符の扱いに注意してください。例えば、動的コンテンツ内に引用符が含まれているとパースエラーが発生することがあります。
4. よくある失敗パターンと具体例
実際の業務フローで報告される失敗パターンをいくつか紹介します。これらは筆者がこれまでに支援した事例に基づいています。
4.1 文字列と数値の比較
例:SharePointのリストから取得した「金額」フィールドが文字列型で格納されている場合、条件式「金額 > 1000」と書くと、文字列と数値の比較になるため常にfalseになります。正しくは、数値に変換する必要があります。数値変換には「int()」関数や「float()」関数を使用しますが、変換できない文字が含まれているとエラーになります。事前に「trim」や「replace」で不要な文字を除去してください。
4.2 リストや配列の要素チェック
例:Outlookから取得したメールの添付ファイルリストから、特定の拡張子のファイルがあるかどうかを確認する場合、`contains(attachments, ‘.xlsx’)` では正しく判定できません。attachmentsはオブジェクトの配列であり、ファイル名の文字列を直接含んでいないためです。正しくは `contains(items(attachments)?[‘name’]?[‘extension’], ‘.xlsx’)` のように、各要素のプロパティにアクセスする必要があります。
4.3 空文字とnullの扱い
例:フォームの入力フィールドが空欄の場合、Power Automateではnullではなく空文字(”)として扱われることがあります。条件式で「空欄ならAを実行」としたい場合、`equals(variable, null)`では空文字を捕捉できません。代わりに `empty(variable)` または `equals(variable, ”)` を使用してください。逆に、nullが入る可能性がある場合は、`coalesce(variable, ”)` で空文字に変換してから比較する方法もあります。
5. 管理者に確認すべき設定項目
フローが正しく設計されているにもかかわらず条件分岐が動かない場合、組織の管理設定が原因である可能性があります。以下の項目を管理者に確認してください。
5.1 コネクタの接続設定
使用しているコネクタ(SharePoint、Excel Online、Outlookなど)の接続が有効か、認証トークンが期限切れになっていないかを確認します。特に、条件分岐の前段でデータを取得するアクションが失敗している場合、条件自体が評価されないことがあります。実行履歴でそのアクションのステータスが「成功」になっているか確認してください。
5.2 データ損失防止ポリシー(DLP)
組織のデータ損失防止ポリシーによって、特定のコネクタの組み合わせやアクションが制限されることがあります。例えば、SharePointとOutlookのコネクタを同じフロー内で使用できないポリシーが設定されていると、条件分岐以降のアクションがブロックされる可能性があります。管理者にDLPポリシーの内容を確認し、フローがポリシーに違反していないかチェックしてください。
5.3 地域設定とタイムゾーン
Power Automateの環境設定で、既定のタイムゾーンがUTCになっている場合、ローカル時間とずれが生じます。日付や時刻の比較を行う条件式では、明示的にタイムゾーンを変換する関数(convertTimeZoneなど)を使用するか、フロー全体のタイムゾーン設定をローカル時間に変更する必要があります。この設定は管理者が環境設定で変更できます。
6. よくある質問(Q&A)
ここでは、条件分岐に関してよく寄せられる質問とその回答をまとめます。
Q1: 条件式で「等しくない」はどう書けばよいですか?
A: 「not(equals(値1, 値2))」のように、not関数でequalsを否定します。もしくは「値1 != 値2」はPower Automateの式言語では使用できません。必ずnotとequalsの組み合わせを使ってください。
Q2: 複数の条件をANDやORで結合するには?
A: 条件アクションの設定画面で「詳細モード」に切り替え、式エディタに「and(条件1, 条件2)」または「or(条件1, 条件2)」と記述します。また、条件アクションを入れ子にすることで段階的な判定も可能です。注意点として、andやorは小文字で指定しないとエラーになります。
Q3: 実行履歴に条件アクションの出力が表示されないのはなぜですか?
A: 条件アクションが実行されなかった場合、つまり前のアクションが失敗したり、条件自体がスキップされたりした場合に出力が表示されません。実行履歴で前のアクションのステータスを確認し、成功しているかどうかを調べてください。また、フロー自体が「中断」ステータスになっている場合は、条件アクションに到達する前にエラーが発生している可能性があります。
7. まとめ
条件分岐が想定どおりに動作しない場合、まずは実行履歴で各アクションの入出力を確認し、データ型や値の実態を把握することが第一歩です。特に、動的コンテンツの値が予想と異なるケースが大半を占めるため、変数を使って値を一時保存しながら検証すると原因が特定しやすくなります。また、管理者に確認すべき設定(DLP、タイムゾーンなど)も意識しておくことで、より早い解決が期待できます。問題が解決しない場合は、条件式をシンプルにして段階的に複雑にするアプローチを試してください。本記事の手順を参考に、一つ一つ確認を進めていただければ、ほとんどの問題は解決できるはずです。
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Excel】文字が入っているセルの「個数」を数える!COUNTA関数の簡単な使い方
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
