Power PlatformでDX推進を目指すプロぺリアDX支援のメインビジュアル プロぺリアDX支援

即使える!Power Platform技術紹介

「なるべく短時間で」「効果の高い本質的な知識を」「煩わしい広告なしに」獲得!

Power AppsでSharePoint Listのデータをフィルタして表示する方法

本記事でわかること

Filter関数の基本

Filter(データソース, 条件式[, 条件式2, ...]) は、条件に合う行だけを返す関数です。
条件は =(等しい)、>=(以上)などの比較や、&&(AND)、||(OR)で組み合わせます。

基本構文

Filter( 
    データソース,
    条件
)

Filter関数の使用例

例1: 単一の条件

データソースの後に、欲しい行の条件を指定

Filter( 
    商品テーブル,
    商品名 = "ノートPC" // 「商品名」が「ノートPC」の行だけ
)

例2: 複数の条件(AND)

条件を「&&」でつなぐ(いくつ繋いでもOK)

Filter( 
    商品テーブル,
    商品名 = "ノートPC" && 価格 < 100000 // 「商品名」が「ノートPC」かつ「価格」が10万円未満の行だけ
)

または、条件を「,」でつなぐ(いくつ繋いでもOK)

Filter( 
    商品テーブル,
    商品名 = "ノートPC", 価格 < 100000 // 「商品名」が「ノートPC」かつ「価格」が10万円未満の行だけ
)

例3: 複数の条件(OR)

条件を「||」でつなぐ(いくつ繋いでもOK)

Filter( 
    商品テーブル,
    商品名 = "ノートPC" || 価格 < 100000 // 「商品名」が「ノートPC」または「価格」が10万円未満の行だけ
)
Point! これらの式をギャラリー(Gallery)コントロールなどの「Items」プロパティに設定します。
すると、自由にフィルタリングしたデータの表示ができます!

条件が選ばれてたらその条件、選ばれていなかったらすべて出す方法

重要な構文

ユーザーが何も入力していない/何も選んでいないとき(例えば画面を開いた瞬間)は全件表示したい場合
以下のように条件をIsBlank(...)||条件の形式にします。

Filter( 
    データソース, 
    // 入力欄を空チェックして、空だったら何もフィルターをかけない、何か入ってたらその件で絞り込む
    IsBlank(入力欄や選択肢などのコントロール) || 条件
)

使用例

例えば、ユーザーが検索テキスト入力(ここではTextInput1)に何も記入していないときは全件表示、何か記入したらその条件で絞り込みたい場合

Filter( 
    商品テーブル, 
    // 入力が空なら何もフィルターをかけず全件、入力があれば商品名で絞り込み
    IsBlank(TextInput1.Text) || 商品名 = TextInput1.Text 
)

上式の意味:

  • IsBlank(TextInput1.Text) … TextInput1への入力がないなら true(= 全行が通過)
  • ||の左が true なら||の右は評価されず通過(=右の条件を無視)。つまり、左がtrueになるような条件を設定すれば、右が適応されたり無視されたりできる。
  • 商品名 = TextInput1.Text … 入力があるときだけ一致レコードに絞り込み

複数条件への拡張

ドロップダウンや日付など、複数の入力が空欄でも動くようにするには、同じパターンを積み重ねます。
とにかく「IsBlank() || 条件」を「,」区切りで繰り返す!

Filter( 
    商品テーブル, 
    IsBlank(TextInput1.Text) || StartsWith(商品名, TextInput1.Text), //TextInput1に何か入力されてたら商品名で前方一致検索
    IsBlank(CategoryDropdown.Selected.Value) || カテゴリ.Value = CategoryDropdown.Selected.Value, //CategoryDropdownで何か選ばれてたらカテゴリで絞り込み
    IsBlank(DatePicker1.SelectedDate) || 販売日 >= DatePicker1.SelectedDate //DatePicker1で日付が選ばれてたらその日以降で絞り込み
)
  • ANDの積み上げFilterの第2引数以降の「,」は AND 結合と同義。行ごとにすべて満たす必要があります。
  • あとは各「,」区切りの塊ごとに「IsBlank() || 条件」を記載するだけ
  • むやみに複数のIF文で条件分けする方法はメンテナンスが非常に大変なのでなるべく使わない!
Point! 「空なら全件 / 入力したら絞る」をシンプルに拡張性高く表現できるのがIsBlank() || 条件
この形を覚えましょう!

委任に関して

フィルター条件を設定する際、重要になるのが委任という考え方です。
委任というのはザックリ「データソースが2000件(初期値は500件)を超える場合、条件に当てはまるデータ全部取ってこれないかも」というPower Appsに課せられた制限です。
特に理由がなければ、委任行の設定を最大値である2000件に変更しておきましょう。

委任行の最大値の設定方法

委任設定の手順の画像

これで、データソースが2000件以内のときは、条件に合致するデータをすべて取得できます。

無理やり委任を回避する方法

少しややこしいですが、下記のような式でデータを取得しておけば、2000件を超えるデータも活用できます。
(データソースを直接見るのではなく、コレクションに一旦格納して使う形になります)

準備①:「IDcopy」という、ID列をコピーした数値列をデータ側に用意(ID列は大小比較が委任不可能なため)

準備②:以下の式を、AppのOnStartプロパティか、ScreenのOnVisibleプロパティに設定

// 大きな商品テーブル(今回はSharePoint の「ProductList」)を最新化
Refresh(ProductList);

// 1回に扱える件数の上限をしきい値として定義
UpdateContext({ threshold: 2000 });

// リストの一番最後の商品(IDが最大のもの)を取得
UpdateContext({
    lastRecord: First(
        Sort(ProductList, ID, SortOrder.Descending)
    )
});

// ループの最大回数を計算(2000件ごとに分割するため)
UpdateContext({
    maxIteration: RoundUp(lastRecord.ID / threshold, 0)
});

// コレクションを初期化(分割して集めた商品データをここに格納)
Clear(colProductList);

// 2000件ごとに商品データを小分けして収集
ForAll(
    Sequence(maxIteration, 0),   // ループ回数を生成(0,1,2,...)
    With(
        {
            prev: Value(Value) * threshold,            // 前回のしきい値
            next: (Value(Value) + 1) * threshold      // 次のしきい値
        },
        // 条件に合う範囲の商品をまとめて収集
        Collect(
            colProductList,
            Filter(ProductList, prev < IDcopy && IDcopy <= next)
        )
    )
);

データを2000件ごとに区切って取得し、colProductListというコレクションに格納するイメージです。慣れてきたら使ってみてください。

FILTER条件チートシート

FILTER関数でよく使用する条件式の記載方法をまとめました。ここでは、委任不可能な条件には注意書きを入れています。
この表を参考に、様々な条件を試してみてください!

条件 記載例 備考
=(等しい)
Filter(
    Products, 
    商品名 = "サンプル"
)
完全一致で検索
Tips: ID列では=しか委任できない(2000件以上の場合注意)
<>(等しくない)
Filter(
    Products, 
    価格 <> 100
)
「≠」の意味。指定値以外を抽出
Tips: 文字列の場合委任不可能(2000件以上の場合注意)
in(含む)
Filter(
    Products, 
    "プ" in 商品名
)
部分一致検索。テキスト検索でよく使う
Tips: 委任不可能(2000件以上の場合注意)
StartsWith
Filter(
    Products, 
    StartsWith(商品名, "サ")
)
前方一致(指定文字で始まるか)
EndsWith
Filter(
    Products, 
    EndsWith(商品名, "品")
)
後方一致(指定文字で終わるか)
>, <, >=, <=
Filter(
    Products, 
    価格 >= 500
)
数値や日付の比較に使用可能
Or / And
Filter(
    Products, 
    (価格 > 500 Or カテゴリ = "特価") && 在庫 > 0
)
複数条件を組み合わせ
Tips: &&||を使う
IsBlank
Filter(
    Products, 
    IsBlank(承認者)
)
空白チェックに利用
Tips: うまくいかないときはIsEmpty()を使ってみてもよい
委任不可能(2000件以上の場合注意)
Not
Filter(
    Products, 
    Not(IsBlank(承認者))
)
条件の否定(条件をひっくり返す)
「!」でも代用可: !Not(IsBlank(承認者))
Tips: 委任不可能(2000件以上の場合注意)

列型ごとのチートシート

FILTER関数で条件を指定する際、フィルターしたい列の型ごとに書き方が異なります。ここでは、その型ごとの記載方法をまとめました。
特に「選択肢列」「ユーザー列」は独特で、皆さん詰まりやすいので注意しましょう。

列の種類 条件の記載例 備考
テキスト列
Filter(
    商品一覧, 
    商品名 = "サンプル"
)
Filter(
    商品一覧, 
    StartsWith(商品名, "サ")
)
Filter(
    商品一覧,
    EndsWith(商品名, "ル")
)
Filter(
    商品一覧, 
    "ンプ" in 商品名
)
Filter(
    商品一覧, 
    商品名 in ["サンプル","テスト"]
)
文字列は「"」で囲む
Tips: 「in」は委任不可能
数値列
Filter(
    商品一覧, 
    価格 = 100
)
Filter(
    商品一覧, 
    価格 >= 500
)
Filter(
    商品一覧, 
    価格 in [100,200,300]
)
数値はクォーテーション不要
Tips: 「型が違う」エラー時はValue(価格)Text(価格)で数値/テキスト型変換
ID列は「=」以外は委任不可能。ID列でなければ>や <=など委任可能
選択肢列(単一選択)
Filter(
    商品一覧,
    カテゴリ.Value = "承認済み"
)
Filter(
    商品一覧, 
    カテゴリ.Value in ["承認済み","却下"]
)
選択肢列は「.Value」を指定
選択肢列(複数選択)
Filter(
    商品一覧, 
    "オフィス用品" in Concat(製品カテゴリ,Value,",")
)
複数選択肢列は「Concat」で結合して部分一致検索
この例だと、「製品カテゴリ」列の複数選択の中に「オフィス用品」が選ばれている行を抽出
日付列
Filter(
    商品一覧, 
    登録日 = DateValue("2025-08-26")
)
Filter(
    商品一覧, 
    登録日 >= Today()
)
Filter(
    商品一覧, 
    登録日 <= Now()
)
Filter(
    商品一覧, 
    Year(登録日) = 2025
)
Filter(
    商品一覧, 
    Month(登録日) = 8
)
日付列には時刻を含む/含まないの設定がデータソース側であるので注意。
時刻を含むかどうかもちゃんと揃えて条件を作成しましょう。
Tips: Today()は日付のみ、Now()は時刻も含む
ユーザー列
Filter(
    商品一覧, 
    ユーザー列.DisplayName = "山田太郎"
)
Filter(
    商品一覧, 
    ユーザー列.Email = "example@example.com"
)
Filter(
    商品一覧, 
    ユーザー列.Department = "営業部"
)
ユーザー列はとりあえず列名の後に「.」を打ってみて、予測変換から使えそうなものを選んでみるでもOK
Tips: DisplayNameとEmailだけ委任可能。それ以外は委任不可能。
Point! 列の型と委任は常に意識しましょう。FILTER関数を覚えれば、LOOKUP関数なども同じ要領で使用できます!
💻 Power Appsの検索・一覧画面の設計でお困りなら
短時間のスポット相談から、要件整理&設計レビューまで対応します。

あなたの仕事にも、変化を。

無料相談から、DXの第一歩を踏み出しませんか?

お問い合わせ ブログ一覧