📝 この記事は、Power Automate で配列を扱う2つのアクションを、実際に動かしながら整理したものです。
式や関数の仕様はMicrosoft 公式(ワークフロー式の関数リファレンス)で確認しています。
一覧を取ってきたあと、そのまま全件まわしている フローを社内でよく見かけます。
必要なのは数件なのに、毎回全部を処理している。
先に絞るという一手を入れるだけで、速さも安定性も変わります。
全件取ってきたけれど、使うのは条件に合う数件だけ。
取り出した値を、メール本文に1行で並べたい。
この記事では、フィルター配列で絞る・結合で1本にまとめるの2つを扱います。

棚から必要な引き出しだけ抜き出すのがフィルター配列、抜き出した中身を1本の紐でつなぐのが結合。この置き換えで、自分の中では整理がつきました。
📋 この記事で分かること
- 条件に合う要素だけを残すフィルター配列の使い方
- 配列を1本の文字列にする結合(Join)の使い方
- 絞ってからまわすと何が良くなるのか
- つまずきやすい「型」と「0件」の扱い
フィルター配列:先に絞る
「条件に合うものだけ残す」を、式を書かずに設定できるアクションです。
設定するのは2つだけです。差出人(From)に絞りたい配列を入れ、
その下の条件欄に左・比較方法・右を書きます。条件アクションと同じ構造です。
出力は常に配列です。1件だけ使いたい場合でも配列で返るので、
first() で取り出します。
first(body('フィルター配列'))?['タイトル']
速い|まわす件数が減ります。
止まりにくい|対象外のデータでエラーになる可能性が消えます。
読みやすい|ループの中に条件を書かなくて済むので、処理が1本道になります。
文字列と数値を比べようとすると一致しません。
数値は
int()、文字は string() でそろえてから比べます。日付は
formatDateTime() で書式をそろえます。
結合(Join):1本の文字列にする
配列をメール本文に並べたいときに使います。区切り文字を指定するだけです。
['A', 'B', 'C'] + 区切り「, 」 → A, B, C
式でも書けます。
join(body('フィルター配列'), '、')
一覧の取得で返ってくるのは、たいていオブジェクトが並んだ配列です。
そのまま結合には渡せません。
先に「選択(Select)」で欲しい列だけ抜き出して、値の配列にしてから渡します。
数値が混ざっている場合も、そのままでは扱えません。
string() で文字にそろえてから渡します。
選択(Select)を挟む
「選択」は、配列の形を組み替えるアクションです。
オブジェクトの配列から、欲しいキーだけを取り出して並べ直せます。
たとえば申請一覧から名前だけを抜き出せば、
そのまま結合に渡して「田中、鈴木、佐藤」という1行が作れます。
絞る(フィルター)→ 形を変える(選択)→ つなぐ(結合)。
この3段が、配列を扱うときの基本の並びです。

ループの中で条件を見て、変数に足して……とやっていた処理が、アクション3つで済むようになります。
0件のときを必ず考える
絞った結果が0件になることは普通に起きます。そのまま first() を使うと止まります。
件数で分岐しておくのが確実です。
length(body('フィルター配列')) → 0 なら通知しない、など
結合は0件でも空文字を返すので止まりませんが、
空のメールが飛ぶことになります。送る前に件数を見ておくと安心です。
選択(Select)で形を組み替える
フィルターで絞ったら、次は形を整える段です。ここで使うのが「選択」です。
設定画面は「キー」と「値」の対応表になっています。
左に新しい項目名、右に元の配列から取る値を入れます。
たとえば申請一覧から「名前」と「金額」だけを抜き出せば、
不要な列を落とした、扱いやすい配列になります。
選択の画面には、テキストだけを出力するモードがあります。
キーを消して値だけにすると、
['田中', '鈴木', '佐藤'] のような単純な配列が作れます。これが、そのまま結合に渡せる形です。
集合として扱う関数
配列同士を組み合わせる関数もあります。名簿の突き合わせなどで役立ちます。
重複を除いて合わせる|2つの配列を1つにまとめ、重複を落とします。
union(配列A, 配列B)
両方にあるものだけ|共通している要素だけを残します。
intersection(配列A, 配列B)
先頭を飛ばす・先頭から取る|件数を区切りたいときに使います。
skip(配列, 3) / take(配列, 5)
union() は同じ配列を2回渡すと重複除去として使えます。
ダブりを消したいだけのときに便利です。
配列を任意の順に並べ替える関数は用意されていません。
順序が必要なら、取得する側で並べておくのが基本です。
一覧を取るアクションに並び替えの指定があるなら、そこで指定してしまいます。
Apply to each を速くする
どうしてもループが必要なときは、動かし方を調整できます。
Apply to each の設定に同時実行の指定があります。
既定では順番に処理しますが、有効にすると複数を並行して進められます。
番号を振る、前の結果を次で使う、といった順番に意味がある処理では使えません。
また、同時に実行すると
接続先のサービス側で制限に当たりやすくなります。
速くしたいだけなら、まずまわす件数を減らすほうが確実です。
件数が多いときの取得
一覧を取得するアクションには、既定で返す件数の上限があります。
「全部取ったつもりが途中までだった」という事故は、ここで起きます。
アクションの設定にページ分割の項目があるので、
件数が多いと分かっているなら有効にして、しきい値を指定します。
そもそも全件を取らずに済むなら、そのほうが速くて安全です。
取得する時点で絞れるなら、フィルターより手前で絞る。
一覧アクション側のクエリで条件を書ければ、配列を扱う手間ごと減らせます。
実際に組んでみる:期限切れをまとめて1通で知らせる
ここまでの話を、1本のフローにつなげます。
「毎朝、期限を過ぎている申請を集めて、担当者に1通だけ送る」という形です。
まず対象のリストを取得します。件数が多いことが分かっているなら、
ページ分割を有効にしておきます。
期限が今日より前で、かつ状態が未完了のものだけ残します。
日付を比べる前に、書式をそろえるのを忘れないでください。
件数を見て分岐します。0件のときに空のメールを送らないためです。
length(body('フィルター配列')) が 0 より大きい
タイトルと期限をつなげて、読める1行にします。
キーを消してテキストだけのモードにすれば、値だけの配列になります。
item()?['タイトル'] + '(期限:' + item()?['期限'] + ')'
改行で結合すれば、そのまま箇条書きになります。
1件ずつ送らないので、通知は1通で済みます。

10件あれば10通飛びます。受け取る側からすると、たまったものではありません。絞る・整える・つなぐを知ってから、通知の作り方そのものが変わりました。
📌 ループを疑う癖をつける
Apply to each が出てきたら、いったん止まって考える価値があります。
- 全件まわす必要が本当にあるか|フィルター配列で先に絞れないか
- 1件だけでいいのではないか|
first()で済むかもしれません - 中で送っていないか|通知やファイル作成は、ループの外に出せることが多いです
ループが消えると、フローは短くなり、速くなり、読めるようになります。
3つとも一度に良くなるので、まず疑う価値があります。
補足:確認ポイント
item() と items() の違い
選択やフィルターの中では item() で、いま処理している1件を指します。
一方、Apply to each の中で明示的に指したいときは
items('ループの名前') の形を使います。
ループが入れ子になっているとき、
どちらのループの1件なのかを指定できるのが後者です。
?[‘キー’] を使う理由
値を取り出すときに ? を付けておくと、
そのキーが存在しない場合にエラーではなく null が返ります。
データにばらつきがある一覧を扱うときは、付けておくほうが止まりにくくなります。
配列の中の配列
入れ子になった配列は、そのまま扱おうとすると混乱します。
選択で1段階ずつ平らにしていくのが結局いちばん早いです。
一気に取り出そうとして長い式を書くと、あとで直せなくなります。
結合した結果が「,」だらけになる
オブジェクトの配列をそのまま結合に渡すと、
中身がまとめて文字にされて読めない結果になります。
選択を挟んで値だけの配列にしてから渡す、が原則です。
覚える順番
配列まわりは一度に覚えようとすると多く見えます。実際に効く順に並べるとこうなります。
- 1番目:フィルター配列|これだけで、ループの件数が減ります
- 2番目:選択|形を変えられると、扱える場面が一気に増えます
- 3番目:結合|通知やメールの見た目が整います
- 4番目:集合の関数|必要になったときに調べれば十分です
最初の2つを覚えるだけで、フローの見た目はかなり変わります。

ただ、一覧を扱うフローには必ず出てきます。私はここを後回しにしていたあいだ、ずっと Apply to each の中で組んでいました。
逆に言えば、ここを越えると作れるものの幅がはっきり広がります。
一覧から必要なものだけ取り出して、読める形にして、1通にまとめる。
この流れが作れるかどうかが、実務で使えるフローになるかの分かれ目です。
まとめ
📌 この記事のポイント
- フィルター配列で先に絞る。速く・止まりにくく・読みやすくなる
- 出力は常に配列。1件だけ使うなら
first() - 結合に渡せるのは値の配列だけ。オブジェクトの配列は選択を挟む
- 並びは絞る → 形を変える → つなぐ
- 0件のときの分岐を必ず用意する
📚 仕様の出典
join()・first()・length() の仕様は、ワークフロー式の関数リファレンス(Microsoft Learn)に記載されている内容です。
※ 本記事は公開日時点の内容です。筆者が実際に試した手順をまとめたもので、Power Automate の仕様は今後変わる可能性があります。
※ 記事の構成・図解の一部は、AIを壁打ち相手にしながら作成しています。


コメント