• MS365tips
  • PowerAutomate

Power Automate Apply to each(For each)とは 利用場面・解除方法を実例付きで解説

「Power AutomateのApply to each(For each)の使い方が知りたい」
「勝手にApply to eachが作られてしまうのはなぜ?」
「Do UntilとApply to eachの使い分けは?」

この記事では、

  • Apply to eachとは
  • Apply to eachの構成要素
  • 利用場面
  • 不要なApply to eachへの2つの対処法

を解説します。

Apply to eachは、「要素数だけ繰り返す」ためのアクションです。
自動で適用されますが、基本的にはそのまま利用して問題ありません。
Apply to eachを使わず、常に1件目だけを取得するための簡単な修正法もお伝えします。

—この記事の監修者—

ヒョウノモトハル

  • 1979年神奈川県生まれ
  • 大学卒業後、モラトリアム期間を経て会社員となる
  • 経理・総務・管理といったバックオフィスでの経験を積み、2016年から会社の情報システム部門へ転属
  • その後2021年にキャリアの経験を活かし、Microsoft365関連の講座でUdemy講師としてデビュー
  • 2023年現在、受講生5万人を抱えるベストセラー講師となる

Apply to each(For each)とは

Apply to eachは、Power Automate内で使える繰り返し処理の1つです。
複数の値を持ちうる結果に対して、その数だけ処理を繰り返します。
終了条件を指定する必要がある「Do Until」よりも、簡単に繰り返しを実装可能です。

アクション名繰り返し条件
Do Until指定した条件を満たすまで繰り返す
Apply to eachある分だけ繰り返す

なお、Apply to each とFor eachは名称が異なるだけで、同じものです。

Apply to eachの構成要素

Apply to eachを利用する際に必要となるものは2つです。
1.以前の手順から出力を選択
2.繰り返す処理
それぞれ簡単に解説します。

1.出力

Apply to eachの構成要素1:出力

まず、Apply to each で必須となるのは「出力」です。
「以前の手順から出力を選択」に、中身を取り出す内容(複数の値を持ちうる結果)を指定します。

わかりやすいのは配列です。
配列名を指定すれば、配列に格納されている要素の数だけ、繰り返し処理が行われるようになります。

2.繰り返す処理

Apply to eachの構成要素2:繰り返す処理

2つ目の要素は、繰り返す処理内容です。
Apply to eachの中に追加したアクションが、繰り返し行われます。
この繰り返す処理の中で、「以前の手順から出力を選択」で指定した内容の中身を利用できます。
上記の画像では、「現在のアイテム」を列1に指定しています。
これは、以下を意味します。

1回目:配列の「0番目のアイテム」を列1へ
2回目:配列の「1番目のアイテム」を列1へ
…(配列の要素数だけ繰り返す)

Apply to eachの利用場面

どんな場面でApply to eachが使えるのか、具体例をお伝えします。

複数添付ファイルの取得

メール、SharePointなどの添付ファイルには、複数ファイルの添付が可能です。
添付ファイルの数だけ繰り返すよう、Apply to eachを活用すると、複数の添付ファイルに対応したフローが作成できます。

(SharePointの場合)

Apply to eachの利用場面1:複数添付ファイルの取得

(参考リンク)

グループ宛のメール送信

Office365内に作成されたグループのメンバーにメールを送る場合もApply to eachを活用します。
「グループメンバーの一覧表示」アクションは、指定したグループのメンバー数分の結果を取得します。
Apply to each でメンバーの人数分だけ、処理(メールアドレスを配列に格納するなど)を繰り返し実行できます。

Apply to eachの利用場面2:グループ宛のメール送信

※上記の例ではこの後のフローで、メールアドレスを格納した配列をメール送信時のメールアドレスに指定しています。

グループ宛のメール送信については、以下の事例の「開発上の工夫点」の中で詳しく解説しています。

 「開始して承認を待機」アクションの「承認者の電子メール」へのメール送信

「開始して承認を待機」アクションの承認者(担当者)は、複数人になる可能性があります。
動的なコンテンツの「回答数 承認者の電子メール」当てにメールを送る場合、承認者の数分繰り返すように、「回答数」に対してApply to eachが行われます。

Apply to eachの利用場面3:「開始して承認を待機」アクションの「承認者の電子メール」へのメール送信

配列の値を利用する

原始的ですが、もちろん配列の値の数だけ処理を繰り返したい場合にも、Apply to eachを活用できます。

以下、複数の値が入った「文字列の配列」の値の数だけ、Excelへの行追加を繰り返すフローです。

Apply to eachの利用場面5:配列の値を利用する

不要なApply to eachへの2つの対処法

Power Automateでは、複数の値を持つ可能性がある動的コンテンツを指定した場合、自動でApply to eachが挿入されます。
可能性があれば必ず適用されてしまい、実際に複数であるかどうかは関係ありません。

対処1:何もしない

まず前提として、自動挿入されたApply to eachをそのままにしても、動作に問題はありません。
Apply to eachは、対象が1件しか存在しない場合、1回だけ処理が行われ、繰り返さずに次の処理に移ります。
フローの見た目上気にならないのであれば、特に手を加える必要はありません。

対処2:修正する

  • 常に1件だけ取得すれば問題ない
  • フローの可読性が落ちるので、ムダなApply to eachは削除したい

このような場合、Apply to eachを削除することもできます。
ただし、修正の手間がかかり、対象が複数件ある場合(例:複数添付ファイル)であっても、1件しか取得せず、見落としが発生する可能性があります。

Apply to eachを回避する方法

Apply to eachが適用されてしまう場面で、常に先頭の1件だけ取得する方法をお伝えします。
SharePointの「複数の項目の取得」アクションを例に、お伝えします。

1.通常通りフローを作成する

まずは、Apply to each を使って、通常通りフローを作成します。

2.Apply to each(For each)の「以前の手順から出力を選択」をコピーし、編集

Apply to eachが適用されないようにする方法の図1

Apply to eachの「以前の手順から出力を選択」をコピーし、メモ帳などに貼り付けます。

@{outputs('複数の項目の取得')?['body/value']}

@{}を削除し、代わりにfirst()で囲います。

first(outputs('複数の項目の取得')?['body/value'])

3.Apply to each内で利用している動的コンテンツをコピーし、編集

Apply to each 内で利用している 動的コンテンツをコピーし、メモ帳などに貼り付けます。
コピーするのは、「以前の手順から出力を選択」の中身を利用している動的コンテンツです。

Apply to eachが適用されないようにする方法の図2

複数ある場合は、それぞれ個別にコピーします。

@{items('For_each')?['Name']}
@{items('For_each')?['ID']}

@{}を削除し、「?」よりも前を消します。

?['Name']
?['ID']

4.手順2と3を組み合わせて、最初の項目を取得する式を作成

2で作成した式「first(outputs(‘複数の項目の取得’)?[‘body/value’])」の後ろに、3の式をつけると最初の項目を取得する式ができあがります。

first(outputs('複数の項目の取得')?['body/value'])?['Name']
first(outputs('複数の項目の取得')?['body/value'])?['ID']

5.Apply to eachを削除し、作成した式を使って書き換える

後は、作成した式を使って、処理を記述すれば完成です。

簡易的に、先ほどの式を変数に格納してみます。

Apply to eachが適用されないようにする方法の図3

テスト結果です。
先頭データのname「佐藤」を取得できています。

Apply to eachが適用されないようにする方法の図4

(SharePointの添付ファイル取得の場合)

他のApply to eachであっても、手順は同じです。SharePointの添付ファイル取得を例に解説します。

1.フローを作成

他のApply to eachの使用時の解説1

2.Apply to eachの「以前の手順から出力を選択」をコピーし、メモ帳などに貼り付けます。

@{body('添付ファイルの取得')}

@{}を削除し、代わりにfirst()で囲います。

first(body('添付ファイルの取得'))

3.Apply to each 内で利用している 動的コンテンツをコピーし、メモ帳などに貼り付けます。

他のApply to eachの使用時の解説2

なお、「ID」で指定しているのはトリガーの値であり、「以前の手順から出力を選択」の値ではないのでコピーは不要です。

@{item()?['Id']}

@{}を削除し、「?」よりも前を消します。

?['Id']

4.1と2を組み合わせて式を作ります。

first(body('添付ファイルの取得'))?['Id']

5.Apply to eachを削除し、作成した式を使って書き換えます。

「添付ファイルのコンテンツの取得」アクションの「ファイル識別子」に、作成した式を入力します。

他のApply to eachの使用時の解説3

テスト結果です。1件目のファイルを取得できました。

他のApply to eachの使用時の解説4

Apply to each を削除し、フローを書き換えました。

他のApply to eachの使用時の解説5

「要素の数だけ繰り返す」でない場合はDo until

最後に、Do Untilとの使い分けについて解説します。
端的に言えば、「要素の数だけ繰り返す」でない場合(Apply to eachが使えない場合)に、Do untilを使いましょう。

自分で繰り返し条件を指定できるのが、Do untilの特長です。

例:

  • 値が0以下になるまで繰り返す
  • 特定の数(10回など)だけ繰り返す
  • 変数の中身に@が含まれている間は繰り返す

基本的には、Apply to each を使える場面では、Apply to eachを活用すると良いでしょう。
「要素の数だけを繰り返す」フローを、Do Untillよりも簡単に実装できるからです。

Microsoft365の運用にお困りではありませんか?

株式会社uniteでは、Microsoft365のすべてのアプリを対象に、法人様向けの運用サポートを行っています。

  • 社内メール⇒teamsへの円滑な移行と利用率UP施策
  • SharePointのドキュメントライブラリを活用したファイル管理
  • ExcelやAccessで作成された既存の社内ツールをPowerAppsへリニューアル
  • 手作業で行っている業務をPowerAutomateで自動化

等、MS365を利用した業務改善のお手伝いをさせて頂いております。
ご予算、サポート範囲については完全オーダーメードでサポート対応をしておりますので、お気軽にご相談ください。