PowerAppsにおけるClearCollect関数は頻繁に使われる関数です。
本記事ではClearCollect関数の基本的な使い方から応用まで詳しく解説します。Power Appsでコレクションを操作する関数はデータソースを操作する上でとても重要なので、ぜひ最後までご覧ください。
ClearCollect 関数の基本
ClearCollect 関数は、Power Apps におけるデータ操作の基本でありながら、よく使われる関数です。
ここでは、ClearCollect 関数の構文、引数、そして関連する Collect 関数、Clear 関数 との違いについて詳しく解説します。
ClearCollect 関数の構文と引数
ClearCollect 関数は、以下のような構文で使用します。
ClearCollect( コレクション名, レコード1, レコード2, ... )
それぞれの要素について見ていきましょう。
- コレクション名: ClearCollect 関数で操作するコレクションの名前を指定します。コレクションとは、Power Apps の中で一時的にデータを保存しておくための「入れ物」のようなものです。コレクションには、テーブル形式でデータを格納することができます。まだ存在しないコレクション名を指定した場合、ClearCollect 関数によって新しいコレクションが作成されます。
- レコード: コレクションに追加したいデータ(レコード)を指定します。レコードは、Excel の行のようなもので、複数の列(項目)とそれに対応する値を持つことができます。ClearCollect 関数では、複数のレコードを一度に追加することが可能です。レコードは、波括弧 {} で囲んで記述し、列名: 値 の形式で指定します。
例えば、以下のように記述することで、”製品リスト” という名前のコレクションに、2 つのレコードを追加することができます。
ClearCollect(
製品リスト,
{ 製品名: "商品 A", 価格: 1000, 在庫数: 50 },
{ 製品名: "商品 B", 価格: 2500, 在庫数: 20 }
)
この例では、”製品リスト” コレクションに、「製品名」、「価格」、「在庫数」という 3 つの列を持つレコードが追加されます。
Collect 関数、Clear 関数との違い
ClearCollect 関数を理解する上で、同じく Power Apps でコレクションを操作する Collect 関数と Clear 関数との違いを把握することが重要です。それぞれの関数の役割と、ClearCollect 関数がどのような位置づけにあるのかを見ていきましょう。
- Collect 関数: Collect 関数は、コレクションにレコードを追加する関数です。既存のコレクションに新しいレコードを追加したい場合に使用します。コレクションの内容を保持したまま、データを追加していくイメージです。
- Clear 関数: Clear 関数は、コレクションからすべてのレコードを削除する関数です。コレクションを空っぽにしたい場合に使用します。コレクション自体は残りますが、中身のデータはすべて消去されます。
- ClearCollect 関数: そして、本題の ClearCollect 関数は、Clear 関数と Collect 関数の機能を組み合わせた関数です。具体的には、ClearCollect 関数は、最初に指定されたコレクションのすべてのレコードを削除し、その後に続けて指定された新しいレコードを追加します。つまり、コレクションを一旦空にしてから、新しいデータで置き換える処理を、1 つの関数で実行できるのです。
関数名 | 役割 | 既存レコード | 新規レコード | コレクションの状態 |
Collect | コレクションにレコードを追加 | 保持 | 追加 | レコードが増える |
Clear | コレクションのレコードをすべて削除 | 削除 | – | 空になる |
ClearCollect | コレクションをクリアしてレコードを追加 | 削除 | 追加 | 新しいレコードのみ |
このように、ClearCollect 関数は、コレクションの内容をリフレッシュしたい場合や、毎回新しいデータでコレクションを初期化したい場合に非常に便利です。
簡単な ClearCollect の使用例
実際に ClearCollect 関数を使ってみましょう。ここでは、ボタンをクリックしたらコレクションを作成し、ギャラリーに表示する簡単な例を紹介します。
ClearCollect( 社員名簿, { 氏名: "山田太郎", 所属: "営業部" }, { 氏名: "田中花子", 所属: "開発部" }, { 氏名: "鈴木一郎", 所属: "人事部" } )
ここでは、”社員名簿” という名前のコレクションを作成し、3 人の社員データを追加する ClearCollect 関数を設定しました。
例えば、ギャラリー内のラベルコントロールの Text プロパティを ThisItem.氏名、もう一方のラベルコントロールの Text プロパティを ThisItem.所属 のように設定します。
これで準備は完了です。アプリをプレビューモードで実行し、ボタンをクリックしてみてください。ギャラリーに「社員名簿」コレクションの内容が表示されるはずです。
ボタンを再度クリックしても、ギャラリーの内容は変わりません。なぜなら、ClearCollect 関数は、ボタンがクリックされるたびに “社員名簿” コレクションをクリアし、同じレコードを再度追加しているからです。
このように、ClearCollect 関数を使うことで、簡単にコレクションを作成し、データを表示することができます。次のセクションでは、ClearCollect 関数の応用的な使い方について解説していきます。
ClearCollect 関数の応用
複数のレコードを効率的に追加する方法、データソースとの連携、入力コントロールとの組み合わせ、そしてパフォーマンス改善のためのデータキャッシュとしての利用など、ClearCollect 関数の応用範囲は非常に広いです。
これらのテクニックを習得することで、Power Apps のデータ操作スキルを一段階レベルアップさせることができるでしょう。
複数のレコードをまとめて追加
ClearCollect 関数では、複数のレコードを引数として直接記述することで、一度に複数のレコードを追加できることを紹介しました。しかし、レコード数が多くなると、数式が長くなり見づらくなってしまうことがあります。このような場合、Table() 関数を活用すると、よりスマートに複数のレコードをまとめて追加できます。
Table() 関数は、複数のレコードをまとめてテーブル形式のデータを作成する関数です。ClearCollect 関数の第 2 引数に Table() 関数を使用することで、複数のレコードを整理して記述することができます。
例えば、先ほどの「製品リスト」の例を Table() 関数を使って書き換えると、以下のようになります。
ClearCollect(
製品リスト,
Table(
{ 製品名: "商品 A", 価格: 1000, 在庫数: 50 },
{ 製品名: "商品 B", 価格: 2500, 在庫数: 20 },
{ 製品名: "商品 C", 価格: 1500, 在庫数: 80 }
)
)
このように、Table() 関数の中にレコードを記述することで、数式が構造化され、可読性が向上します。レコード数がさらに増える場合でも、Table() 関数を使うことで、数式をより管理しやすくなるでしょう。
データソースからデータを取得して ClearCollect
ClearCollect 関数は、Power Apps の外部データソース(SharePoint リスト、Excel テーブル、Dataverse など)からデータを取得し、コレクションに格納する際にも非常に役立ちます。Filter() 関数などのデータ操作関数と組み合わせることで、データソースから必要なデータだけを抽出し、コレクションに効率的に取り込むことができます。
例えば、SharePoint リスト “社員リスト” から、部署が “営業部” の社員データのみをコレクション “営業部社員” に取得したい場合、以下のように Filter() 関数と ClearCollect 関数を組み合わせます。
ClearCollect(
営業部社員,
Filter(
'社員リスト', // SharePoint リスト名
部署 = "営業部" // 抽出条件:部署列が "営業部"
)
)
この数式を実行すると、SharePoint リスト “社員リスト” から、”部署” 列の値が “営業部” であるレコードのみが抽出され、コレクション “営業部社員” に格納されます。ClearCollect 関数を使用しているため、実行するたびにコレクション “営業部社員” はクリアされ、最新の “営業部” の社員データで更新されます。
このように、データソースから条件に合致するデータをコレクションに取得する処理を、ClearCollect 関数と Filter() 関数を組み合わせることで、シンプルに実現できます。
入力コントロールと連携させて動的なコレクションを作成
ClearCollect 関数は、TextInput や Dropdown などの入力コントロールと連携させることで、ユーザーが入力した値に基づいて動的にコレクションを作成することも可能です。これにより、ユーザーの操作に応じてコレクションの内容を変化させ、よりインタラクティブなアプリを作成することができます。
例えば、タスク管理アプリで、タスク名と期日を入力する TextInput コントロールと DatePicker コントロールがあり、ボタンをクリックしたら、入力されたタスク情報がコレクション “タスク一覧” に追加されるようにしたい場合、以下のように ClearCollect 関数を使用します。
ClearCollect(
タスク一覧,
{
タスク名: TextInput_タスク名.Text, // TextInput コントロールの入力値
期日: DatePicker_期日.SelectedDate // DatePicker コントロールで選択された日付
}
)
この例では、ClearCollect 関数は、TextInput_タスク名 コントロールの Text プロパティ(入力されたタスク名)と、DatePicker_期日 コントロールの SelectedDate プロパティ(選択された期日)を、それぞれ “タスク名” 列と “期日” 列の値として持つレコードをコレクション “タスク一覧” に追加します。
ユーザーが TextInput や DatePicker の値を変更してボタンをクリックするたびに、ClearCollect 関数が実行され、入力された最新のタスク情報で “タスク一覧” コレクションが更新されます。
データキャッシュとしての ClearCollect
ClearCollect 関数は、アプリのパフォーマンスを向上させるためのデータキャッシュとしても活用できます。特に、頻繁に参照するデータや、取得に時間のかかるデータソースのデータを、アプリ起動時や画面表示時などにコレクションにキャッシュしておくことで、データアクセスを高速化し、アプリのレスポンスを向上させることができます。
例えば、アプリ起動時に、マスターデータとなる “商品カテゴリ” リストのデータをコレクション “商品カテゴリコレクション” にキャッシュする場合、アプリの OnStart プロパティに以下のような数式を記述します。
ClearCollect(
商品カテゴリコレクション,
'商品カテゴリリスト' // SharePoint リスト名 (商品カテゴリのマスターデータ)
);
アプリ起動時にこの ClearCollect 関数が実行され、”商品カテゴリリスト” の全データが “商品カテゴリコレクション” に格納されます。その後、アプリ内で商品カテゴリを参照する際には、データソース “商品カテゴリリスト” に直接アクセスする代わりに、コレクション “商品カテゴリコレクション” を参照するようにします。コレクションはアプリ内に保持されるため、データアクセスが高速になり、アプリ全体のパフォーマンスが向上します。
ただし、委任 の制限には注意が必要です。ClearCollect 関数自体は委任可能な関数ではありません。そのため、キャッシュするデータソースのデータ量が委任制限(デフォルトでは 500 件、最大 2000 件)を超える場合、すべてのデータをコレクションに取得できない可能性があります。大量のデータをキャッシュする場合は、委任の制限を考慮し、データ量を委任制限内に抑える工夫や、委任可能な関数と組み合わせてデータを段階的に取得するなどの対策が必要になる場合があります。

ClearCollect 関数の活用例
ここでは、ClearCollect 関数が実際にどのような場面で活用できるのか、具体的な実践例を通して見ていきましょう。
アプリ起動時の初期データ設定
Power Apps アプリケーションでは、アプリが起動した際に最初に実行される App オブジェクトの OnStart プロパティがあります。この OnStart プロパティに ClearCollect 関数を記述することで、アプリ起動時に必要な初期データをコレクションに読み込むことができます。
例えば、アプリ全体で使用するマスターデータ(カテゴリリスト、設定値リストなど)をデータソースから取得し、コレクションにキャッシュしておきたい場合、OnStart プロパティで ClearCollect 関数を実行するのが効果的です。
具体的な例として、商品カテゴリを管理する SharePoint リスト “商品カテゴリリスト” があり、このリストのデータをアプリ起動時にコレクション “商品カテゴリコレクション” に読み込むケースを考えてみましょう。
- Power Apps Studio でアプリを開き、左側のツリービューから App オブジェクトを選択します。
- 画面上部のプロパティドロップダウンリストから OnStart プロパティを選択します。
- OnStart プロパティに、以下の数式を入力します。
ClearCollect( 商品カテゴリコレクション, '商品カテゴリリスト' // SharePoint リスト名 );
この設定により、アプリが起動するたびに ClearCollect 関数が実行され、”商品カテゴリリスト” のデータが “商品カテゴリコレクション” に格納されます。アプリ内の他の画面やコントロールからは、データソース “商品カテゴリリスト” ではなく、コレクション “商品カテゴリコレクション” を参照することで、データアクセスを高速化できます。
特に、参照頻度の高いマスターデータや、データ取得に時間がかかるデータソースの初期データを OnStart でコレクションにキャッシュすることは、アプリの起動時間を短縮し、全体的なレスポンスを向上させる上で非常に有効なテクニックです。
画面遷移時のデータ更新
Power Apps アプリケーションでは、画面が表示される際に実行される Screen オブジェクトの OnVisible プロパティがあります。この OnVisible プロパティに ClearCollect 関数を記述することで、画面が表示されるたびに、その画面に関連するデータを最新の状態に更新することができます。
例えば、タスク管理アプリで、タスク一覧画面を表示する際に、最新のタスクデータをデータソースから取得し、コレクションに表示したい場合、タスク一覧画面の OnVisible プロパティで ClearCollect 関数を実行します。
- Power Apps Studio でアプリを開き、タスク一覧画面の Screen オブジェクトを選択します。
- 画面上部のプロパティドロップダウンリストから OnVisible プロパティを選択します。
- OnVisible プロパティに、以下の数式を入力します。
ClearCollect( タスク一覧コレクション, 'タスクリスト' // SharePoint リスト名 (タスクデータ) );
この設定により、タスク一覧画面が表示されるたびに ClearCollect 関数が実行され、”タスクリスト” の最新データが “タスク一覧コレクション” に格納されます。画面上のギャラリーやデータテーブルなどのコントロールの Items プロパティを タスク一覧コレクション に設定しておけば、常に最新のタスク情報が表示されるようになります。
画面遷移のたびに OnVisible で ClearCollect 関数を実行することで、ユーザーは常に最新のデータを確認しながらアプリを利用できるようになります。特に、データが頻繁に更新されるようなアプリにおいては、OnVisible でのデータ更新は非常に重要なテクニックとなります。
TODO アプリでの ClearCollect 活用例
より具体的な例として、シンプルな TODO アプリケーションを想定し、ClearCollect 関数がどのように活用できるかを見ていきましょう。
この TODO アプリでは、以下の機能を実装するとします。
- TODO リストの表示: 登録された TODO 項目を一覧で表示する
- TODO 項目の追加: 新しい TODO 項目を登録する
- TODO 項目の完了: TODO 項目を完了済みにする
このアプリのデータ管理にコレクション “TODOリストコレクション” を使用し、ClearCollect 関数を効果的に活用します。
App オブジェクトの OnStart プロパティで、初期 TODO データ(もしあれば)をデータソースから取得し、”TODOリストコレクション” に ClearCollect します。
ClearCollect( TODOリストコレクション, 'TODOリストデータソース' // TODO 項目を保存するデータソース (例: SharePoint リスト) );
新しい TODO 項目が追加されたら、Collect 関数を使って “TODOリストコレクション” に新しい項目を追加します。 (Collect 関数を使用するのは、既存のコレクションデータを保持しつつ、新しい項目を追加するためです。)
Collect( TODOリストコレクション, { タイトル: TextInput_TODOタイトル.Text, 状態: "未完了" // 初期状態は "未完了" } ); Reset(TextInput_TODOタイトル); // 入力欄をクリア
TODO 項目を完了にするボタンがクリックされたら、Patch 関数などを使って、データソースの該当項目の状態を “完了” に更新します。その後、ClearCollect 関数を使って “TODOリストコレクション” を最新の状態にリフレッシュします。
Patch( 'TODOリストデータソース', // データソース名 LookUp('TODOリストデータソース', ID = ThisItem.ID), // 更新対象のレコード { 状態: "完了" } // 更新内容 ); ClearCollect( // コレクションを最新データで更新 TODOリストコレクション, 'TODOリストデータソース' );
ClearCollect 関数利用時の注意点
ClearCollect 関数は非常に便利な関数ですが、利用する上で注意すべき点もいくつか存在します。特に、委任の制限、フォームでの利用、そして Collect 関数との使い分け は、ClearCollect 関数を効果的に活用するために理解しておくべき重要なポイント。
それぞれ詳しく解説します。
委任の制限について
委任 は、Power Apps がデータソースに対してクエリを実行する際の効率性とパフォーマンスを維持するための仕組みです。委任可能な関数は、データソース側で処理を実行できるため、大量のデータに対しても効率的に処理できます。しかし、ClearCollect 関数は、残念ながら委任可能ではありません。
これはどういうことかというと、ClearCollect 関数を使って大量のデータソース(例えば、SharePoint リストで数千件以上のアイテムを持つリストなど)からデータを取得しようとした場合、委任の制限 に引っかかる可能性があるということです。
具体的には、ClearCollect 関数は、データソースからデータを取得する際に、Power Apps 側で委任制限(デフォルトでは 500 件、最大 2000 件)までのデータしか取得することができません。もし、データソースに委任制限を超えるデータが存在する場合、ClearCollect 関数は委任警告を表示し、実際にコレクションに取得されるデータは委任制限内に留まってしまいます。
委任警告 は、数式バーの下に青い点線や黄色の警告アイコンで表示されます。委任警告が表示された場合は、ClearCollect 関数がデータソース全体を処理できていない可能性があるため、注意が必要です。
委任制限に引っかからないようにするためには、以下の対策を検討する必要があります。
- データ量を委任制限内に抑える: Filter() 関数などを活用し、ClearCollect 関数で取得するデータを必要な範囲に絞り込み、データ量を委任制限内に抑える。
- 委任可能な関数と組み合わせる: Filter() 関数など、委任可能な関数を ClearCollect 関数の前に使用し、データソース側でデータ量を絞り込んでから、ClearCollect 関数でコレクションに取得する。
- ページング処理を実装する (高度なテクニック): データソースのデータをページ単位で段階的に取得し、コレクションに結合していく。ただし、これは高度なテクニックであり、複雑な実装が必要になる場合があります。
委任の制限は、Power Apps で大量データを扱う際に必ず意識する必要がある重要な概念です。ClearCollect 関数を利用する際は、データソースのデータ量と委任制限を常に念頭に置き、適切な対策を講じるようにしましょう。
フォームでは使えない?
Power Apps には、データ入力や編集を効率的に行うための フォーム コントロールが用意されています。フォームコントロールは、データソースに直接接続して、データの表示、編集、登録を簡単に行うことができます。
しかし、フォームコントロールの DataSource プロパティには、コレクションを直接指定することはできません。フォームコントロールは、SharePoint リスト、Dataverse テーブル、SQL Server テーブルなど、外部のデータソースに直接接続することを前提として設計されています。
そのため、コレクションをフォームのデータソースとして直接利用することはできません。もし、コレクションのデータをフォームで表示・編集したい場合は、少し工夫が必要です。
例えば、コレクションのデータをフォームのように表示したい場合は、ギャラリーコントロールと入力コントロール(TextInput、Dropdown など)を組み合わせて、擬似的なフォームを作成する必要があります。
また、コレクションで編集したデータをデータソースに反映させたい場合は、Patch() 関数などを使って、コレクションの変更内容をデータソースに書き戻す処理を実装する必要があります。
このように、コレクションはフォームコントロールのデータソースとしては直接利用できませんが、ギャラリーや入力コントロールと組み合わせることで、フォームライクな画面を作成したり、データソースとの連携を実現したりすることは可能です。
Collect 関数との使い分け
ClearCollect 関数と似た名前の関数に、Collect 関数 があります。どちらもコレクションにレコードを追加する関数ですが、その動作は大きく異なります。ClearCollect 関数と Collect 関数は、それぞれ異なる目的で使用される関数であり、適切な使い分けが重要です。
- ClearCollect 関数: コレクションをクリア(空にする)してから、指定されたレコードを追加します。コレクションの内容をリフレッシュしたい場合や、毎回新しいデータでコレクションを初期化したい場合に適しています。
- Collect 関数: コレクションにレコードを追加します。既存のコレクションの内容は保持され、新しいレコードが追記されます。コレクションにレコードを追加していきたい場合や、既存のレコードを残しつつ、新しいレコードを加えたい場合に適しています。
どちらの関数を使うべきかは、実現したい処理によって異なります。
- コレクションを初期化したい、置き換えたい場合: ClearCollect 関数
- コレクションにレコードを追加したい場合: Collect 関数
例えば、TODO アプリの例で、TODO 項目を完了にした後、TODO リストを最新の状態に更新したい場合は、ClearCollect 関数を使ってコレクションをリフレッシュするのが適切です。一方、新しい TODO 項目を追加する場合は、Collect 関数を使って既存のリストに項目を追加するのが適切です。
ClearCollect 関数と Collect 関数は、名前は似ていますが、役割が異なります。それぞれの関数の特性を理解し、目的に応じて適切に使い分けるようにしましょう。
まとめ
ClearCollect 関数は、基本的な構文が簡単で直感的に理解することができるため、初心者でもすぐに使い始めることができます。
PowerApps を使用して、複雑なアプリケーションを開発する場合でも、この関数を使って効率的にデータを管理することができるはず。ClearCollect 関数は、PowerApps の開発において非常に役立つ関数であることがわかります。
弊社ではPowerAppsを活用したローコード開発に力を入れており、開発後の内製化までも幅広くご支援可能です。弊社がこれまで支援した実績などは以下からご覧いただけます。お困りごとがあればお気軽にお問い合わせください。