RPA推進担当者のあなた!
RPAの全社展開につまづいていませんか?

Power Automate desktop|For eachの使い方

For eachって使い方よくわからないな。Loopとどう違うの?

という疑問に答えます。

この記事でわかること

For eachの使い方
For eachとLoopの違い

それでは、どうぞ!

この記事を書いた人
この記事を書いた人
こさい
こさい

(株)完全自動化研究所代表のこさいです。

1) ITエンジニア歴25年超。RPA開発歴8年超
2) RPA関連の書籍を6冊出版。
3) RPAトレーニング動画を販売しています。
4) Power Automate Desktopフロー販売を行っています
5) ご質問・お仕事のご依頼はこちら

For eachの使い方

リストやデータテーブルのアイテム数分ループ処理を行うときは[For each]アクションを使用します。

実行のたびに行数が変動するExcelデータやCSVデータなどを操作するときに必要なテクニックです。

[For each]アクションの使い方

[反復処理を行う値]にはループ処理を行うリスト、データテーブルなどの値を入力します。

[保存先]には[反復処理を行う値]で指定されたリストやデータテーブルの現在の値が格納されます。

[CurrentItem]には現在の値が格納される

[For each]アクションを使ったフローの例を基に解説します。リスト型変数[List1]には「A」「B」「C」という3つのテキストが格納されています()。

[For each]アクションにより、リスト内のアイテムがなくなるまで、1つずつループ処理が行われます()。

変数[CurrentItem]には現在の値が格納されます()。

このフローを実行するとメッセージボックスが3回表示されます。リスト[List1]には3つのアイテムが格納されているからです。メッセージに変数[CurrentItem]の値が表示されるようになっているので、「現在の値:A」「現在の値:B」「現在の値:C」と表示されます。

こさい
こさい

For eachがだいたいわかりましたか?もっと理解するために、Loopとの違いを見ていきましょう!

LoopとFor eachの違い

For eachの使い方をより理解するために、Loopと比較して解説します。

まずはLoopからです。

[Loop]アクション

[Loop]アクションは反復(ループ)する回数がわかっているときに使います。

ループ数を格納する変数(ループインデックスと呼ぶ)が1から始まり、1つずつ増加されて、最終的に3になるまでループするには、下図のように設定します。

[Loop]アクションは何回ループするのかがわかっている必要があり、[開始値]と[終了]を設定しなければなりません。

ループインデックスは[生成された変数]に格納されるため、現在のループ回数がわかります。ループインデックスをループ中に利用することができます。

こさい
こさい

Loopがわかったところで、もう一度For eachについて振り返りつつ、Loopとの違いを認識しましょう!

[For each]アクション

[For each]アクションは[Loop]アクションと違って何回ループするのか設定しなくていいという特徴があります。

ループ処理内でリストやデータテーブルなどの現在のアイテムにアクセスできるので、ループ処理内の記述がシンプルになり、可読性が高まります

[Loop]アクションと違いループインデックスは自動では生成されません

[For each]アクションのループ中にループインデックス使用したい場合は、[変数の設定]アクションを使ってループインデックスを作成する必要があります

データテーブルのアイテム数分ループするフローで比較

もっと具体的に違いを認識するために、具体的なフローを示します。

データテーブルのアイテム数分ループするフローを[Loop]アクションを使った場合と、[For each]アクションを使った場合で比べてみます。

ループ処理するのはデータテーブル[DataTable]とします。このデータテーブルは[あたらしいデータテーブルを作成する]アクションを使って作成します(データテーブルの作成方法については「データテーブルの作成方法」を参照ください)。

データテーブルのイメージ

データテーブル[DataTable]の列[Text]のアイテム(’A’、’B’、’C’、’D’、’E’)をメッセージボックスで表示するフローはそれぞれ次のようになります。

[Loop]アクションと[For each]アクションの比較

ぱっと見た感じ、ステップ数は同じですね。

上記フローの2ステップ目の[Loop]アクションと[For each]アクションの設定ダイアログの違いを見てみましょう。

[Loop]アクションでは、[終了値]を取得しないといけないので、「%DataTable.Rows.Count%」を指定しています。[開始値]と[増分]も入力しないといけません。

比べると、[For each]アクションのほうがシンプルに設定できていますね。[反復処理を行う値]に「%DataTable%」と設定するだけです。

Loop]アクションと[For each]アクションの比較

[メッセージを表示]アクションの[表示するメッセージ]も見てみましょう。[Loop]アクションでは「%DataTable[LoopIndex – 1][1]%」、[For each]アクションでは「%CurrentItem[1]%」と設定しています。こちらも[For each]アクションのほうがシンプルに設定できていますね。

[Loop]アクションではデータテーブルの行と列を指定していますが、[For each]アクションではアイテムにアクセスできているため、列を指定するだけです。

まとめ

Power Automate for desktopでFor eachを使う方法を解説しました。

この記事では、リストやデータテーブルの値を表示させる例だったので、[For each]アクションの方が優れているように思えたかもしれません。

しかし、単純に「1~100まで連番で入力したい」といったケースでは、[Loop]アクションを使った方が簡単です。[For each]アクションを使うなら、1~100が入ったリストを事前に作成しないといけません。これは面倒ですね。

このように、For eachとLoopの違いを理解することで、両者の使い分けができるようになります。

僕の本の中でも解説しているので、他のテクニックも身に付けたい方はどうぞ。
>>Power Automate for desktop業務自動化最強レシピ

「Power Automate for desktopの基礎を体系的に学んだ方が理解が早そうだなぁ」と思われる方には、初心者向け動画をどうぞ。Premium会員に登録していただけると視聴できます。