Power Automate desktop|For eachの使い方

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

という疑問に答えます。

この記事でわかること

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

それでは、どうぞ!

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

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

1) エンジニア歴25年超。RPA支援8年超
2) RPA関連の書籍を6冊出版。
3)ご質問・お仕事のご依頼はこちら

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会員に登録していただけると視聴できます。

コメント ログインすると書き込めます