Filter関数で複数条件を指定するPower Appsの数式完全ガイド

Power AppsのFilter関数で複数条件を指定したいのに、数式の書き方が分からなかったり青い波線の委任警告が出たりして困っていませんか?本記事では、基本構文からAND・ORの組み合わせ方、委任警告への対策、

LookUp関数との使い分けまで分かりやすく解説します。

安全で快適に動くアプリを実装しましょう。

PowerAppsをもっと効率的に学びたいと考えている方には、Udemyのオンライン講座がおすすめです。
初心者向けのコースが充実しており、動画で実践的に学べるため、独学よりもスムーズにスキルを習得できます。
特に、PowerAppsの基本操作や関数の使い方を体系的に学びたい方に最適です。

この記事を書いた人
  • 一部上場企業に勤める会社員
  • ITエンジニア未経験
  • 2024年7月から社内DX担当に異動
  • 同時期にPowerPlatformを始める
  • 効率的に学ぶためにブログスタート
ちょびです!

目次

Power AppsとExcelで異なるFilter関数の基本仕様と複数条件の考え方

「filter 関数複数条件」と検索するとExcelの情報が多いですが、Power Appsには独自のルールがあります。まずは両者の違いと基本仕様を押さえ、Power Appsならではの抽出の仕組みを正しく判断できるようにしましょう。

Power AppsにおけるFilter関数の基本構文と数式評価の仕組み

Power Apps(Power Fx)でデータを絞り込む際に中心となるのが、Filter関数(条件に一致するレコードを抽出する関数)です。公式ドキュメントで定義されているFilter関数の基本構文は次の通りです。

Filter( Table, Formula1 [, Formula2, ... ] )

第1引数の「Table」には、対象となるテーブルやコレクションを指定します。第2引数以降の「Formula」には、テーブルの各レコードに対して評価される条件式を記述します。

Filter関数はテーブルの各行に対して数式を評価し、結果がtrueになったすべてのレコードを抽出してテーブル形式で返します。テーブル内の列を条件式の中で直接参照できるため、直感的にフィルターを構築できる点が特徴です。

ExcelとPower AppsにおけるFilter関数の複数条件ルールの違いを示す合流型図解

Excelの配列演算とPower Appsの論理演算における複数条件の違い

Excelにも同様のFILTER関数が存在しますが、複数条件の考え方は大きく異なります。Excelではブール値の配列同士をアスタリスク(*)で掛け合わせるAND条件や、プラス(+)で足し合わせるOR条件といった配列演算を採用しています。

一方、Power Appsでは配列の掛け算ではなく、カンマ区切りや論理関数(And / Or)を用いて条件を直接評価します。Excel数式の癖でうっかりアスタリスクでつなぐと、Power Appsではエラーになるため注意しましょう。

両環境の違いは次の比較表の通りです。

比較項目ExcelのFILTER関数Power AppsのFilter関数
AND条件の記述(条件1)*(条件2)Filter(表, 条件1, 条件2)
OR条件の記述(条件1)+(条件2)Filter(表, Or(条件1, 条件2))
評価の仕組み配列同士の掛け算・足し算各レコードに対する論理評価

Excelの動的配列数式に慣れている方ほど構文の違いに気を配り、Power Appsの論理結合を意識しましょう。

複数条件を指定する際に注意したい戻り値の形式とデータ型の基本

Filter関数を使う上で重要なのが、戻り値が常にテーブル形式(複数行のデータ)である点です。合致するデータが1件だけでも、返ってくるのは単一の値ではなくテーブルとして扱われます。

単一のレコードそのものを取得したい場合は、後述するLookUp関数を利用するのが適切です。

また、複数条件を指定する際は、比較対象となる列のデータ型に注意を払いましょう。文字列型の列は二重引用符(" ")で囲み、数値型や日時型には適合した値で比較式を組み立てます。

型が一致していないと意図しない評価結果を招く原因になるため、事前の型確認を徹底しましょう。

Power AppsのFilter関数は論理評価によってテーブルを返す関数です。Excelのようなアスタリスクによる配列演算とは書き方が異なる点に注意しましょう。

Power AppsのFilter関数でAND条件を指定する具体的な書き方

業務アプリの開発現場で最も頻出するのが、「ステータスが完了かつ担当者が自分」のように複数の条件をすべて満たすデータの抽出です。

ここでは、Power Appsならではのシンプルで確実なAND条件の数式パターンと実務テクニックを身につけましょう。

カンマ区切りまたはAnd関数でつなぐ基本のAND条件

Power AppsのFilter関数でAND条件を指定する最も推奨される書き方は、条件式をカンマで区切る方法です。公式仕様として、第2引数以降に指定された複数の数式は、自動的にAnd関数で結合されて評価されます。

// カンマ区切りによるAND条件(推奨)
Filter(
    日報データ,
    ステータス = "完了",
    担当者 = "佐藤"
)

もちろん、次のように明示的にAnd関数を使ってネストした記述を行うことも可能です。

// And関数を明示的に使ったAND条件
Filter(
    日報データ,
    And(
        ステータス = "完了",
        担当者 = "佐藤"
    )
)

どちらの記法でも動作は同じですが、関数のネストが浅くなり可読性が高まるカンマ区切りが推奨されています。特別な理由がない限り、AND条件はカンマでつなぐ書き方を選んでおけば間違いありません。

Power AppsのFilter関数で複数条件を評価してレコードを絞り込む手順を示すフロー型図解

条件が3つ以上に増えた場合の数式の組み立て方

絞り込みの条件が3つや4つと増えた場合でも、基本的な組み立てルールは変わりません。Filter関数の第2引数以降に、カンマで続けて新しい条件式を順番に追記していくだけです。

// 条件が3つ以上ある場合の数式例
Filter(
    案件マスター,
    進捗 = "商談中",
    部署 = "営業部",
    確度 >= 80
)

指定する条件が増えると数式が横に長く伸びてしまうため、数式バー内で適宜改行とインデントを適用しましょう。1行に1つの条件式を記述するようにレイアウトを整えるだけで、どの列にどんな条件を課しているのかが一目で把握できます。

結果としてアプリの保守性が高まり、チーム開発でも可読性の向上につながるためおすすめです。

日付期間や数値範囲による複数条件の指定テクニック

業務システムで利用頻度が高いのが、「申請日が開始日と終了日の間にある」といった期間指定や、数値範囲のフィルターです。こうした範囲指定も、比較演算子を用いた2つの条件式をカンマでつなぐことで直感的に実装できます。

// 日付範囲による絞り込みの数式例
Filter(
    経費申請,
    申請日 >= DatePickerStart.SelectedDate,
    申請日 <= DatePickerEnd.SelectedDate
)

数値の範囲指定も同様に、「金額 >= 10000, 金額 < 50000」のように下限と上限を並べて記述します。

ポイント

範囲指定を行う際は、以上(>=)や以下(<=)を使って境界値を含めるのか、より大きい(>)や未満(<)で境界値を含めないのかを明確に意識して条件式を組み立てましょう。

境界値の指定を誤ると、終了日当日のデータが集計から漏れてしまう原因になるため注意が必要です。

AND条件は第2引数以降をカンマで区切るだけで自動的に結合されます。実務では改行を活用して可読性を高めるのがスマートな記述のコツです。

Power AppsのFilter関数でOR条件や複合条件を組み立てる方法

「東京または大阪」「未着手または保留」のように、いずれかの候補に一致するデータを抽出する場面も多いです。ここでは、OR条件の構文やIn演算子、ANDと混ざる複合条件の制御方法を判断できるようになりましょう。

Or関数や論理演算子を用いていずれかの条件を満たすレコードを抽出する構文

いずれかの条件を満たすレコードを抽出したい場合は、Or関数または論理和演算子であるパイプ記号(||)を使用します。カンマで区切ると自動的にAND条件として評価されてしまうため、OR条件を記述する際は明示的な指定が必要です。

// Or関数を使ったOR条件の記述
Filter(
    社員名簿,
    Or(
        拠点 = "東京",
        拠点 = "大阪"
    )
)

また、Power FxではOr関数と同等の論理和演算子として二重縦線(||)もサポートされています。

// 論理和演算子(||)を使った記述
Filter(
    社員名簿,
    拠点 = "東京" || 拠点 = "大阪"
)

どちらの記法でも、指定したいずれか一方の条件式がtrueになれば対象レコードが抽出されます。

ポイント

Or関数とパイプ記号(||)の機能的な違いはありません。チームのコーディング規約や好みに合わせて表記を統一しておくとコードの保守が容易になります。

同じ列に対して複数の検索候補を指定する書き方

同一の列に対して「東京」「大阪」「名古屋」のように3つ以上の候補を指定したい場合、Or条件を並べると数式が長くなります。そのようなケースでは、候補値の一覧テーブルを用意し、In演算子を組み合わせる書き方が効果的です。

// In演算子を用いた複数候補の一括指定
Filter(
    社員名簿,
    拠点 in ["東京", "大阪", "名古屋"]
)

公式ドキュメントにある通り、In演算子は大文字と小文字を無視して一致する文字列を識別してくれます。検索候補をブラケット([ ])で囲んだ単一列テーブルとして渡すことで、数式をすっきりと整理できます。

さらに将来的に選択肢が増減した場合でも、候補リストの値を修正するだけで柔軟に対応できる構文パターンです。

カッコを用いてAND条件とOR条件を組み合わせる優先順位の制御

実務のアプリ開発で間違いが発生しやすいのが、「在籍中かつ(部署が営業部または総務部)」のようにANDとORが混在する複合条件です。

論理演算ではAND条件がOR条件よりも優先して評価されるため、意図した通りの判定順序を維持するには、必ずカッコを用いてOR条件を括る必要があります。

// 正しいカッコの使い方(OR条件を優先グループ化)
Filter(
    社員名簿,
    在籍フラグ = true,
    (部署 = "営業部" || 部署 = "総務部")
)

もしカッコを付け忘れると、「在籍中かつ営業部」と「総務部」が並列に評価されてしまいます。その結果、総務部であれば退職者であっても全件抽出されてしまうという取得ミスが発生します。

注意

AND条件とOR条件を組み合わせる際は、数式を書く前に論理構造を整理し、カッコによる優先順位の指定を徹底してください。

OR条件はOr関数やパイプ記号(||)で明示し、AND条件と混ざる複合条件では必ずカッコを使って評価の優先順位を明確に制御しましょう。

Filter関数で複数条件を扱う際に避けて通れない委任の警告と対処法

Filter関数を使いこなす上で最大の難所が「委任」です。委任の仕組みを把握していないと、運用途中でデータが抜け落ちる原因になります。ここでは警告の原因と安全な設計アプローチをしっかり判断できるようにしましょう。

Power Appsにおける委任の仕組みと青い波線が表示される原因

Power Appsにおける委任(Delegation)とは、データ検索やフィルター処理を端末側ではなくクラウドのデータソース側に肩代わりさせる仕組みです。

データソース側で条件判定を実行し、合致したレコードだけを端末に送り返すことで、通信データ量を抑えて高速な動作を保ちます。

しかし、データソースによって委任に対応している関数や演算子の範囲は異なります。Power Appsが条件式をデータソース側へ完全には委任できないと判定した場合、数式バー上で該当箇所に青い波線(下線)を表示して警告を出します。

Power AppsにおけるFilter関数の委任動作と非対応時の警告発生メカニズムを示す背景型図解

委任できない複数条件が引き起こすデータ取得漏れのリスク

数式に青い波線の警告が出ている状態を放置すると、運用上深刻なデータ欠落を引き起こす危険性があります。

委任できない条件式が含まれている場合、Power Appsはクラウドから先頭の一定件数だけをダウンロードし、手元のデータの中だけでフィルターを実行してしまうためです。

公式ドキュメントによると、このローカル処理のレコード制限は既定で500件に設定されており、アプリの設定で拡張できる上限も最大2000件までとなっています。

例えば、100万件のデータが存在するデータソースに対して委任できないFilter関数を実行した場合、最初の500件しかスキャンされません。

目的のデータが501件目以降に存在していても見つけることができず、画面から抜け落ちる取得漏れが発生します。開発中はテストデータが少なく正常に見えても、本番運用でデータが増加した瞬間に発覚する深刻な不具合です。

注意

委任警告を放置してデータ行制限(500〜2000件)に依存した設計を行うと、データ件数の増加に伴って検索結果が欠損する重大なトラブルにつながります。

委任警告を回避して大量データを安全にフィルター処理する設計の工夫

大量のデータを扱う実務アプリでは、委任警告を出さないように数式とデータ構造を工夫することが運用の基本方針となります。複数条件を安全に処理するための具体的な回避策として、次のアプローチが推奨されます。

  • データソース側で委任がサポートされている演算子(=、<>、>= など)を優先して使用する
  • 委任非対応の関数や複雑な計算ロジックをFilter関数の条件式内に直接組み込まない
  • 検索用の結合列やフラグ列をあらかじめデータソース側に設けておく
  • 日付やステータスなど委任可能な条件で一次絞り込みを行ってから追加処理する

あらかじめデータソースごとの委任規則に沿った設計を取り入れることで、データ件数が数万件を超えても警告を発生させず、高速かつ正確なデータ処理を維持できます。

委任警告(青い波線)を放置すると500件(最大2000件)を超えたデータが取得漏れします。委任可能な演算子を選び、安全な数式設計を心がけましょう。

実務で役立つFilter関数の実践活用パターンとLookUp関数との使い分け

基本構文と委任の制約を理解できたら、実際のアプリ画面へ組み込んでいきましょう。ここでは、ユーザー操作に応じて一覧を切り替えるUI連携の実装手順や、LookUp関数との使い分け、コレクションを活用した表示高速化のテクニックを解説します。

ギャラリーのItemsプロパティと連動させて動的検索画面を作る手順

キャンバスアプリ開発で定番の実装が、画面上のドロップダウンやテキスト入力と連動させた検索ギャラリーです。ギャラリーコントロールのデータソースを指定するItemsプロパティに、UIコントロールの選択値を参照するFilter関数を設定します。

// ドロップダウンと連動したギャラリーのItems設定例
Filter(
    タスク管理,
    ステータス = DropdownStatus.Selected.Value,
    担当部署 = DropdownDept.Selected.Value
)

ユーザーが画面上でドロップダウンの選択肢を変更すると、Power AppsがItemsプロパティの数式を動的に再評価し、合致したレコード一覧がギャラリーへリアルタイムに反映されます。

画面描画のパフォーマンスを保つため、ギャラリー内の不要なネストコントロールを減らし、スムーズなスクロールと表示切り替えを実現しましょう。

複数レコードを返すFilter関数と単一レコードを返すLookUp関数の使い分け

データを抽出する関数として、Filter関数と頻繁に比較されるのがLookUp関数です。両者の決定的な違いは、戻り値として返されるデータの構造にあります。

Filter関数が条件に合致する「すべてのレコード」をテーブル形式で返すのに対し、LookUp関数は「最初に見つかった1件のレコード」のみを単一レコードとして返します。

Excelの関数に例えるなら、条件に合う複数行をスピル出力するFILTER関数と、合致した1つの値をピンポイントで取得するXLOOKUP関数の違いに相当します。

一覧画面を表示するギャラリーにはFilter関数を用い、詳細画面のフォームや特定の値をラベルに表示する用途にはLookUp関数を採用するのが適切な使い分けです。

関数名戻り値の形式主な用途特徴
Filterテーブル(複数行)ギャラリー、データテーブル条件を満たすすべてのレコードを抽出
LookUpレコード(単一行)フォームのItem、ラベル表示最初に見つかった1行のみを直接取得

複数条件で絞り込んだ結果をコレクションに格納してアプリを高速化する技

頻繁に参照するマスターデータや変更頻度の低いフィルター結果を扱う場合は、ローカルストレージであるコレクションを活用するのが効果的です。ClearCollect関数を利用して、抽出したレコードセットをアプリのメモリ上へ一度キャッシュします。

// 起動時やボタン押下時にフィルター結果をコレクションへ保存
ClearCollect(
    colActiveProjects,
    Filter(
        プロジェクト一覧,
        進行状況 = "進行中",
        年度 = 2026
    )
)

ClearCollect関数はコレクション内の既存データをすべて消去した上で、指定したレコードセットを新規に追加してくれます。

ギャラリーのItemsプロパティにこのコレクションを指定すれば、クラウドへの通信回数を削減でき、画面遷移やフィルター操作の体感レスポンスを劇的に引き上げることが可能です。

一覧表示にはテーブルを返すFilter関数、1件の詳細取得にはLookUp関数を使い分けましょう。結果をコレクションにキャッシュすれば体感速度も大幅に向上します。

Filter関数の複数条件に関するよくある質問

検索条件が未入力の場合に全データを表示させるにはどう数式を書けばよいですか?

IsBlank関数を使います。「IsBlank(TextInput.Text) || 列名 = TextInput.Text」と記述すれば、未入力時は条件が自動でtrueとなり、全レコードを表示できます。

Filter関数で複数条件を指定したギャラリーの表示順を並べ替えるにはどうすればよいですか?

Sort関数で外側を囲みます。「Sort(Filter(...), 日付列, SortOrder.Descending)」のようにネストすれば、複数条件の抽出と降順ソートを同時に実現できます。

大文字と小文字や全角と半角を区別せずに複数条件で検索することはできますか?

大文字小文字を無視するSearch関数を併用するか、In演算子を利用します。「Search(Filter(...), \"文字\", 列名)」のように組み合わせることで、柔軟な部分一致検索が可能です。

Filter関数の結果から特定の列だけを取り出して表示することはできますか?

ShowColumns関数を使います。「ShowColumns(Filter(...), \"列名1\", \"列名2\")」と記述すれば、指定した列のみを取り出してテーブルを整形できます。

まとめ

Power AppsのFilter関数で複数条件を扱う際は、AND条件をカンマ区切り、OR条件を論理和演算子で記述し、データソースへの委任を成立させることが安定運用の鉄則です。

まずは作成中のアプリで、2つの条件をカンマでつなぐ基本のANDフィルターから動作と委任警告を確かめてみてください。

よかったらシェアしてね!

Power Apps・Power Automate の個別サポート

Power Apps・Power Automate 開発サポート(初心者歓迎・画面共有OK)

記事を読んでも解決しないときは、僕に直接相談してください

  • どこから手を付ければいいかわからない
  • アプリやフローのエラーで先に進めない
  • Excel や紙の管理をアプリに置き換えたい

製造業の DX 推進担当として現場のアプリづくりに携わってきた経験をもとに、ビデオチャットで一緒に進めます。

ココナラでサービス内容を見る

見積り相談は無料です(ココナラのページが開きます)

目次