対象読者
- Excel/PowerPointなど、一般的なツールの操作を理解している人
- RPAツールを用いて業務を自動化したい人
ループ処理とは
ループ処理では、[ループ]アクショングループのアクションを使用することで「決められた回数」「特定の条件を満たす間」など特定の条件を満たす間だけ、処理を繰り返すことができます。
例えば、一つのフォルダに入っているファイルに対して一つひとつ同じ処理を行いたい場合、同じフローをそれぞれのファイルに対して書いていると、ファイル名がフローで参照したものと異なる場合やファイル数の増減によって、適用が漏れてしまったり、ファイルが見つからずエラーが発生してしまったりすることがあります。また、処理対象が大量にある場合、同じフローを個別に書くよりも一つだけ書く方が明らかにフロー作成の生産性も上がります。個別に同じフローを複数書いていると、フロー自体に要件変更や問題があって修正する時、すべてを修正しなければなりません。
アクションを繰り返し実行する、ループ処理の実装方法
「Loop」アクションは、LoopIndexという変数が指定した範囲にある間内部に配置したフローを繰り返し実行します。
ここでは、第2回の条件分岐で作成したフローを編集し、ファイルの内容を行単位に出力してみましょう。前回のフローとフローで利用しているテキストファイルについては、前回の記事を参照してください。
[1]ファイルの内容をリストに保存する
[ファイルからテキストを読み取ります]アクションのパラメーター選択画面を開き、[内容の保存方法]を[リスト(それぞれがリストアイテム)]に変更して、[保存]ボタンをクリックします。

リストとは、複数の値を一つの変数で持てる変数の型で、インデックス番号を付与して要素を参照します。これによって、読み取ったファイルの内容が行ごとに分割されて、リストとして変数FileContentsに格納されます。FileContentsの各要素には、変数名[番号]の形式でアクセスできます。例えばFileContents[0]が1行目、FileContents[1]が2行目、FileContents[n-1]がn行目を意味します(1行目はインデックス番号0で表される点に注意です)。
[2][Loop]アクションを配置する
[ループ]-[Loop]アクションを、ワークスペースの[ファイルからテキストを読み取ります]と[メッセージを表示]の間に、ドロップします。


[Loop]アクションのパラメーター選択画面が開くので、以下の表のように設定してください。
項目 | 設定値 |
---|---|
開始値 | 0 |
終了 | 2 |
増分 | 1 |

Loop-Endの中に配置したフローが繰り返し実行されます。その中のアクションでループを識別する変数[LoopIndex]を使用できます。最初のループ時は、[開始値]に設定した値(この例では0)が入っています。Loop-EndのEndまで実行されると、Loopのところに制御が戻り、変数[LoopIndex]の中身が、[LoopIndex]の現在の値+増分に設定した値で更新されます(最初の更新では1)。この値が[終了値](ここでは2)を超えていなければ、再び中に配置したフローの実行が繰り返されます。[終了値]を超えている場合には、中の処理を実行せずLoop-Endの後続のフローに制御が移ります。
[3]繰り返し実行するアクションをループに配置する
[メッセージを表示]アクションを右クリックし、表示されたコンテキストメニューから[上に移動]を選択、[Loop]~[End]の配下に移動します。

[4]メッセージを修正する
[メッセージを表示]アクションのパラメーター選択画面を開き、[表示するメッセージ]を[%FileContents[LoopIndex]%]に変更して、[保存]ボタンをクリックします。これによって、ループインデックス(ループの周回)に応じて、対応する行の内容が表示されるようになります。

[5]フローを実行する
再びフローを実行してみましょう。テキストファイルを選択すると、ファイルの内容が1行ずつメッセージボックスに表示されます。

現時点では[終了]に2を設定しているので、3行目までしか実行されません。すべての行に対して、処理を実行するためには、[Loop]アクションのパラメーター選択画面の[終了]に「%FileContents.Count - 1%」と設定してください。
FileContents.CountはFileContentsの要素数です。これでファイルの行数が変化しても、それに応じて終了値も変化します(「-1」しているのは、インデックス番号が0はじまりだからです。よって、終了のインデックス番号も実際の行数より1小さいのです)。
