ADVERTISEMENT

【Power Automate】空白値の条件判定で困った時の会社環境での安全な再設定

【Power Automate】空白値の条件判定で困った時の会社環境での安全な再設定
🛡️ 超解決

Power Automateでフローを作成していると、空白のデータを条件判定する場面が頻繁にあります。例えば、Excelのセルが空欄の場合や、SharePointの列に値が入っていない場合など、業務データには必ずと言っていいほど空白が存在します。しかし、Power Automateでは「空白」を表す値が何種類もあり、それぞれの扱いを誤ると条件分岐が思い通りに動かず、誤った処理が実行されるリスクがあります。特に会社の共有環境でフローを運用する場合、意図しない動作が他のメンバーにも影響するため、安全な再設定方法を理解しておくことが重要です。本記事では、空白値の種類とその判定方法、実際に起こりやすい失敗パターンを詳しく解説し、会社環境で安全に再設定する手順を紹介します。

【要点】この記事で確認すること

  • 最初に見る場所: まずPower Automateのアクションやトリガーの出力内容を確認し、実際に何の値が入っているかを調べてください。デバッグ用の「Compose」アクションを挿入してJSONを確認すると原因が特定しやすくなります。
  • 切り分けの軸: 問題の原因が「値の種類(null/空文字列/空配列)」なのか、「条件演算子の選び方」なのか、「データソースの仕様」なのかを切り分けてください。特にSharePointやDataverseとExcelでは空白の扱いが異なります。
  • 注意点: 会社PCでフローを編集する際、組織のポリシーによりコネクタの使用制限やDLP(データ損失防止)ポリシーが適用されている場合があります。勝手に条件式を変更する前に、管理者に確認すべき項目を後述します。

ADVERTISEMENT

空白値の種類とPower Automateでの動作の違い

Power Automateで扱う空白値は、大きく分けて「null」「空文字列(\"\")」「空の配列([])」の3種類です。これらは見た目上はどれも「何もない」ように見えますが、条件式での評価結果が異なります。まずはそれぞれの性質を理解し、実際の動作を確認しましょう。

null(何も設定されていない状態)

nullは「値が存在しない」ことを示します。変数やフィールドが初期化されていない場合や、オブジェクトのプロパティが存在しない場合に現れます。Power Automateの条件式で @equals(outputs('変数'), null) のように比較すると真になりますが、@empty(outputs('変数')) はnullに対してエラーになる場合があるので注意が必要です。SharePointの「選択肢」列で値が未設定の場合、nullとして取得されることが多いです。

空文字列(長さ0の文字列)

空文字列は \"\" で表され、文字列型の値として「空っぽ」であることを意味します。Power Automateでは、@empty(変数) の式で空文字列を判定できます。Excelのセルが空欄の場合は、多くのコネクタで空文字列として取得されます。ただし、数値の列で空欄の場合はnullになることもあるため、データ型に依存します。

空の配列(要素数0の配列)

配列が空の場合、[] として表現されます。例えば、SharePointの「ユーザーまたはグループ」列で誰も選択されていないとき、空の配列が返ることがあります。条件式では @empty(変数) で空配列を判定できますが、配列に対してnullチェックだけだと見逃す可能性があります。

条件判定でよくある失敗パターン

実際の業務で発生しやすい失敗例を3つ紹介します。これらのパターンを知っておくことで、同様の問題に遭遇した際に迅速に対処できます。

パターン1:nullと空文字列を混同した条件式

例えば、SharePointリストの「タイトル」列が空欄かどうかを判定する際に、@equals(outputs('取得したアイテム')?['Title'], null) と書いたとします。しかしSharePointのテキスト列は、値が未入力の場合も空文字列として返されることがあり、nullではないために条件が偽となります。正しくは @empty(outputs('取得したアイテム')?['Title']) を使うべきですが、nullの場合はエラーになることもあります。このように、データソースによって返ってくる値の種類が異なるため、まずは実際の値を確認する習慣が重要です。

パターン2:空の配列に対してlengthをチェックする際のエラー

配列の要素数を調べるとき、@length(outputs('配列変数')) を使いますが、変数がnullの場合は式がエラーになります。先にnullチェックをしないとフローが中断されます。また、空の配列に対して @equals(length(...), 0) は正しく動作しますが、nullの場合はlength関数が処理できないため、安全に判定するには @and(not(equals(outputs('配列変数'), null)), equals(length(outputs('配列変数')), 0)) のように複合条件が必要です。

パターン3:条件アクションの「空白である」オプションの誤解

Power Automateの条件アクションには「次の値に等しい」や「空白である」といったビジュアルな条件設定があります。「空白である」は内部的に @empty(式) として評価されますが、これが空文字列には正しく動作しても、nullや空配列に対しては動作が安定しないケースがあります。特に動的なコンテンツがオブジェクト型の場合、予期せずエラーになることがあるため、式を直接書くほうが安全です。

安全な条件式の書き方と再設定手順

ここでは、空白値を安全に判定するための具体的な手順を説明します。会社環境でフローを修正する際は、必ずコピーしてテスト用のフローを作成してから行い、本番に影響が出ないように注意してください。

  1. 実際の値を確認する: フローに「Compose」アクションを追加し、判定したい動的コンテンツをそのまま出力します。実行して出力結果のJSONを確認し、値がnullなのか空文字列なのか空配列なのかを特定します。
  2. 複合条件式を作成する: 以下の式を参考に、安全な空白判定式を作成します。@or(equals(variables('対象'), null), equals(variables('対象'), ''), equals(variables('対象'), [])) または @empty(variables('対象')) でもよいですが、空配列には対応しているもののnullにはエラーになる場合があるため、注意が必要です。最も安全なのは @and(not(equals(variables('対象'), null)), empty(variables('対象'))) のパターンで、nullの場合もfalseとなりエラーを回避できます。
  3. 条件アクションの式を直接編集する: ビジュアルデザイナーの「空白である」を信用せず、条件アクションの「詳細モード」に切り替え、上記の複合条件を直接入力します。これにより、内部的な変換ミスを防げます。
  4. 管理者に確認が必要な設定を洗い出す: 会社環境では、コネクタのカスタムコネクタやオンプレミスデータゲートウェイの設定が制限されている場合があります。修正を加える前に、SharePointやExcel Onlineコネクタの使用許可、および式内で利用する関数がポリシーで禁止されていないかをIT部門に確認してください。
  5. テスト用フローで動作確認する: 実際のデータでテストし、想定通りの分岐が行われるかを確認します。特に、空のデータが入力された場合と、何らかの値が入力された場合の両方でテストします。問題がなければ本番フローに反映します。

状況別の比較表:データソースごとの空白値の振る舞い

以下の表は、代表的なデータソースで未入力の項目を取得した場合にPower Automateに返される値の種類と、安全な判定式の例をまとめたものです。フロー作成時の参考にしてください。

データソース 未入力時の戻り値 安全な判定式(例) 注意点
Excel Online(セル) 空文字列(数値の場合はnull) @or(equals(変数, null), equals(変数, '')) 数値と文字列で挙動が異なるため、データ型を事前に確認してください。
SharePoint(テキスト列) 空文字列 @empty(変数) nullは発生しませんが、式が長くなる場合は @equals(変数, '') でも可。
SharePoint(ユーザー列) 空の配列([]) @and(not(equals(変数, null)), empty(変数)) 配列に対してnullチェックを忘れずに行ってください。
Dataverse(テキスト列) null @equals(変数, null) 空文字列は通常入らないため、null比較で十分です。
HTTP要求(JSON) プロパティ自体が存在しない場合はnull @and(contains(outputs('HTTP'), 'プロパティ名'), not(equals(変数, null))) プロパティの存在確認も合わせて行うと安全です。

管理者に確認すべき設定と注意点

会社の環境でPower Automateの条件判定を修正する際は、以下の点を管理者に確認してから作業を進めてください。セキュリティポリシーやコンプライアンスに違反しないように注意しましょう。

DLPポリシーによる式の制限

組織によっては、Power Automate内で使用できる関数やコネクタに制限がかかっている場合があります。特に、empty()length() などの式関数が許可されているかどうか、またカスタムコード(JavaScriptなど)の使用が禁止されているかを確認してください。条件式に直接関数を書く分には問題ないことが多いですが、念のため管理者に問い合わせると安心です。

共有フローと個人用フローの違い

共有フロー(ソリューション内のフロー)を編集する場合、変更が複数のユーザーに影響します。テスト用の個人用フローを作成してから安全な条件式を検証し、問題がなければ共有フローに反映する手順を踏みましょう。管理者には、変更内容と理由を事前に伝えて承認を得ることをおすすめします。

よくある質問(FAQ)

Q1: 「空白である」条件を使ってエラーが発生します。どうすればいいですか?
A1: 「空白である」は内部的に @empty(…) として動作しますが、nullの場合はエラーになることがあります。代わりに条件アクションの「詳細モード」で明示的に複合条件を記述するか、事前にnullチェックを行うアクションを追加してください。

Q2: SharePointの選択肢列で「選択なし」を判定したいのですが、うまくいきません。
A2: 選択肢列(Choice型)で値が未選択の場合、通常は null または 空文字列 が返りますが、データソースの設定に依存します。まずはComposeアクションで実際の値を確認し、それに合わせた式を書いてください。一般的には @equals(変数, null) で判定できます。

Q3: 条件式の中で @empty()@length() を併用しても大丈夫ですか?
A3: 問題ありません。ただし、@length() はnullの変数に使うとフローが停止するため、必ず先にnullチェックを行ってから使用してください。

まとめ

Power Automateで空白値の条件判定を安全に行うには、まずデータソースごとの戻り値の特性を理解し、実際の値を確認することが最も重要です。null、空文字列、空の配列を区別せずに条件式を書くと、意図しない動作やエラーの原因になります。本記事で紹介した複合条件式や手順を参考に、会社環境でも安全にフローを再設定してください。また、管理者との連携を忘れずに、ポリシーに沿った修正を心がけましょう。正しい空白判定を身につけることで、安定したフロー運用が実現します。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT