Power Apps ギャラリーの複合フィルター|And・Or・範囲・StartsWith を組み合わせる

Filter 関数の基本と全件表示対応を覚えたら、次は And・Or・範囲・StartsWith を組み合わせた複合フィルターです。複数の Dropdown を使った絞り込みや、テキスト入力での範囲指定まで実装できるようになります。

And:複数条件がすべて true のときだけ返す

And は複数の条件をすべて満たす行だけを返します。ステータスと担当者の両方で絞り込む場合は次のように書きます。

Filter(Tasks, Status = Dropdown1.Selected.Value And AssignedTo = Dropdown2.Selected.Value)

And を使うと条件が増えるほど絞り込みが厳しくなります。3つ以上の条件を繋ぐことも可能で、同じように And を続けるだけです。

複合条件を書くときは、各条件を単独でテストして動くことを確認してから And で繋ぐのがコツです。最初から全部書こうとするとどこが間違っているか特定しにくくなります。Filter 関数の入門記事で解説したハードコードでの動作確認の手順と同じ考え方です。

Or:どちらかが true なら返す

Or は条件のどちらか一方が true なら行を返します。複数のステータスをまとめて表示したいときに使います。

Filter(Tasks, Status = "未着手" Or Status = "進行中")

Dropdown に全件表示の All を追加するパターンでもすでに Or を使っています。Or と IsBlank を組み合わせた全件表示で詳しく解説しているので、そちらも合わせて確認しておくと Or の使い所が一気に広がります。

括弧による条件のグループ化

And と Or を混在させる場合、括弧を使って評価の優先順位を明確にする必要があります。括弧なしで書くと And の方が Or より優先されるため、意図しない絞り込みになることがあります。

複数の Dropdown にそれぞれ全件表示(All)を持たせる実装例を示します。

Filter(
    Tasks,
    (Dropdown1.Selected.Value = "All" Or Status = Dropdown1.Selected.Value)
    And
    (Dropdown2.Selected.Value = "All" Or AssignedTo = Dropdown2.Selected.Value)
)

各 Dropdown のブロックを括弧でくくり、And で繋いでいます。このパターンを覚えると、Dropdown を何個追加しても同じ構造で対応できます。1ブロックずつ追加・動作確認しながら組み立てていきましょう。

範囲フィルター(数値・日付)

数値や日付の範囲で絞り込むには > と < を組み合わせます。

数値の範囲指定

予算が 10,000 以上 50,000 以下の行を返す例です。

Filter(Tasks, Budget >= 10000 And Budget <= 50000)

上限・下限のどちらかだけを指定したい場合は片方だけ書けばよいです。たとえば Budget >= 10000 だけなら、10,000 以上の行をすべて返します。

TextInput で最小値・最大値を動的指定する

テキスト入力コントロール(TextInput)を使うと、ユーザーが最小値・最大値を入力して動的に絞り込めます。

Filter(
    Tasks,
    Budget >= Value(MinInput.Text) And Budget <= Value(MaxInput.Text)
)

TextInput の Text プロパティはテキスト型のため、数値列との比較には Value 関数で型変換が必要です。

これを忘れると型エラーになります。私はこの変換を忘れて何度かエラーに悩みましたが、数値の入力欄は必ず Value() を使う、と覚えてからはスムーズに書けるようになりました。

なお、TextInput が空のときに Value(MinInput.Text) は 0 または Blank() を返します。空欄のとき全件を返したい場合は IsBlank 判定を追加してください。

日付の範囲指定

日付範囲の絞り込みには DatePicker コントロールを使うのが便利です。

Filter(
    Tasks,
    DueDate >= DatePicker1.SelectedDate And DueDate <= DatePicker2.SelectedDate
)

DatePicker.SelectedDate は Date 型を直接返すため、型変換なしで日付列と比較できます。SharePoint の日付列は DateTime 型であることが多く、時刻の差異で一致しないケースがあります。そのときは DateValue 関数で日付部分だけを取り出して比較します。

StartsWith:前方一致フィルター

StartsWith は列の値が指定した文字列で始まる行を返します。テキスト検索ボックスと組み合わせて使うのが典型的なパターンです。

Filter(Tasks, StartsWith(Title, SearchInput.Text))

タイトルの前方一致で絞り込む例です。SearchInput にテキストを入力するたびに、ギャラリーがリアルタイムで絞り込まれます。

StartsWith か Search か

テキスト検索には StartsWith(前方一致)と Search(部分一致)の2つの選択肢があります。Filter・Search・LookUp の使い分けでも触れていますが、委任の観点では大きな違いがあります。

関数マッチ方式委任向いている用途
StartsWith前方一致SharePoint・Dataverse で委任可コード番号・氏名の頭文字など
Search部分一致委任不可件数が少ないリストのキーワード検索

大量データのテキスト検索には StartsWith を使うか、検索対象を件数の少ないリストに限定するか、どちらかを選択してください。Search を使いたい場合は委任の上限(既定 500〜2,000件)を超えないか事前に確認が必要です。委任の仕組みと対処法については委任の警告と対処法を参考にしてください。

全部組み合わせた実装例

Dropdown 2つ・テキスト検索・日付範囲をまとめて組み合わせた複合フィルターの例を示します。

Filter(
    Tasks,
    (Dropdown1.Selected.Value = "All" Or Status = Dropdown1.Selected.Value)
    And
    (Dropdown2.Selected.Value = "All" Or AssignedTo = Dropdown2.Selected.Value)
    And
    StartsWith(Title, SearchInput.Text)
    And
    DueDate >= DatePicker1.SelectedDate
    And
    DueDate <= DatePicker2.SelectedDate
)

長い数式ですが、各ブロックは独立しているので1つずつ追加・確認しながら組み立てられます。私は常にこの方法で複合フィルターを組み立てます。Dropdown1 の条件だけで動作確認 → Dropdown2 を追加 → テキスト検索を追加 → 日付範囲を追加、という順番で進めると詰まりにくいです。

なおこの数式ではすべての条件が常に評価されます。DatePicker が初期状態のとき、DueDate >= DatePicker1.SelectedDate が予期しない結果を返す場合があります。

DatePicker を空にしたときは全件を返すよう IsBlank 判定を追加するなど、実装後の動作確認も丁寧に行いましょう。

まとめ

And・Or・範囲・StartsWith を組み合わせることで、業務アプリで必要なフィルターのほぼすべてを実装できます。複雑に見えますが、各ブロックはシンプルなルールの積み重ねです。1つずつ追加・確認しながら組み立てるのが、完成への最短ルートです。

フィルターを使いこなせると、アプリの検索・絞り込み体験が大きく向上します。次はギャラリーの選択行ハイライトや、フォームとの変数連動にも挑戦してみましょう。レイアウトの設定と組み合わせることで、見た目も機能も整ったギャラリー画面が完成します。

ギャラリーの使い方を一覧でまとめた記事はこちらからご覧ください。

Xでフォローしよう