For eachって使い方よくわからないな。Loopとどう違うの?
という疑問に答えます。
・For eachの使い方
・For eachとLoopの違い
それでは、どうぞ!
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]アクションと違いループインデックスは自動では生成されません。
データテーブルのアイテム数分ループするフローで比較
もっと具体的に違いを認識するために、具体的なフローを示します。
データテーブルのアイテム数分ループするフローを[Loop]アクションを使った場合と、[For each]アクションを使った場合で比べてみます。
ループ処理するのはデータテーブル[DataTable]とします。このデータテーブルは[あたらしいデータテーブルを作成する]アクションを使って作成します(データテーブルの作成方法については「データテーブルの作成方法」を参照ください)。
データテーブル[DataTable]の列[Text]のアイテム(’A’、’B’、’C’、’D’、’E’)をメッセージボックスで表示するフローはそれぞれ次のようになります。
ぱっと見た感じ、ステップ数は同じですね。
上記フローの2ステップ目の[Loop]アクションと[For each]アクションの設定ダイアログの違いを見てみましょう。
[Loop]アクションでは、[終了値]を取得しないといけないので、「%DataTable.Rows.Count%」を指定しています。[開始値]と[増分]も入力しないといけません。
比べると、[For each]アクションのほうがシンプルに設定できていますね。[反復処理を行う値]に「%DataTable%」と設定するだけです。
[メッセージを表示]アクションの[表示するメッセージ]も見てみましょう。[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会員に登録していただけると視聴できます。
コメント ログインすると書き込めます