繰り返し処理を使用する

Excelのチュートリアルの中で、DataTableの変数を使用しました。
これは、1つの変数の中に複数のデータが入っているものでした。
Excelの操作の中では、1セルずつ値を取得しましたが、何千件というデータがある場合、これを作ることは非常に大変です。

そこで、ループ処理と呼ばれる繰り返し操作を行うことで、連続して処理を行うことが可能です。

事前準備

今回はExcelの演習で使用したExcelデータを使用します。
下記ExcelデータをA1~C4まで読み取るように、フローを設定してください。

2つのループ処理

PADでは、3つのループ処理が実装されています。
そのうち多く使うのは2つのアクションです。

  • Loop
    • 10回繰り返すなどループの回数を指定します。

  • For each(フォー イーチ)
    • 指定した変数の要素分だけ繰り返します。
    • DataTable、DataRow、Listのみで使用出来ます。
    • 要素、DataRowなどについては、For eachアクションの解説で触れていきます。

Loopアクション

Loopアクションでは、指定した回数分だけ処理を繰り返すことが出来ます。
例えば、Excelのチュートリアルでは、1行目から3行目までの「氏名」を取得する場合は、以下のような指定を行いました。

%ExcelData[1]["Column1"]% または %ExcelData[1][0]%
%ExcelData[2]["Column1"]% または %ExcelData[2][0]%
%ExcelData[3]["Column1"]% または %ExcelData[3][0]%

この中で行番号の1~3という部分は、連続したデータのため、Loopアクションを使うことで1回のアクションに置き換えることが出来ます。

それでは実際に使ってみましょう。
Loopアクションでは「開始値」「終了」「増分」を指定します。
開始値は「何から」、終了は「何まで」、増分は「何個ずつ」と言い換えることも出来ます。

今回は1行目~3行目までを処理したいので、「Loop」アクションを以下のように設定します。

ここで生成された変数のLoopIndexが重要になってきます。
1回目の処理は「1」、2回目は「2」、3回目は「3」というように、%LoopIndex%が変わっていくので、これを%ExcelData%と組み合わせて使っていきます。

まずは「メッセージの表示」アクションをLoopの中に配置します。

次にアクションの設定を以下のようにします。

%ExcelData[LoopIndex]["Column1"]%

ここで、複数の変数を使用するケースに初めて遭遇しました。
変数は%で囲む必要がありますが、%内で複数の変数を使用する場合は、%は最初と最後のみ設定します。

それでは実行してみましょう。
★ 見やすいようにExcelのウィンドウサイズを小さくしています。皆さんはこちらのアクションは追加しなくても大丈夫です。

For eachアクション

続いて、For eachアクションを使用してみましょう。
For eachは指定した変数の「要素」分だけループを行うアクションです。

ここで要素について触れてみます。
要素とは、Excelであれば行や列、ファイル一覧であれば各ファイルを指します。
この要素を持つことが出来るのは、複数の値を持つことが出来る「DataTable」「DataRow(データロウ)」「List(リスト)」の3つだけです。

このうち、DataTableは行と列、DataRowとListは1行のみの情報となります。

一気に難しくなりましたね(汗)
考えるより、実際に触ってみましょう!
さきほどループで作ったフローの下に「For each」アクションを追加します。

「反復処理を行う値」に%ExcelData%を設定します。

次にFor eachの中に「メッセージを表示」アクションを追加し、以下のように設定します。
ここで、%CurrentItem%という変数が出てきますが、これはFor eachで生成された変数です。

%CurrentItem["Column1"]%

それでは、実行してみましょう。
★ 見やすいようにExcelのウィンドウサイズを小さくしています。皆さんはこちらのアクションは追加しなくても大丈夫です。

LoopとFor eachの違い

今回のチュートリアルの結果を見てみると、2つの大きな違いとしては、「氏名」というタイトルが表示されるかされないか、というところがあります。
実は、Loopアクションを使う際に、「1~3」という指定をしているため、一番所の行はスキップされています。
これを「0~3」というように設定を変更すると、全く同じ動きになります。

さて、それでは他に違いはあるのでしょうか?
キーポイントは「増分」です。
For eachは非常に扱いやすい一方で、上から下まで順番に処理されます。
では、以下のような2行をセル結合し、1行とみなしているExcelを見たことはないでしょうか?

このような場合、Loopアクションの増分を「2」にすれば、2行目→4行目→6行目というように、セル結合を行っているケースにも対応することができます。

できるPower Automate Desktop ノーコードで実現するはじめてのRPA
Power Automate Desktop サポートプラン
Power Automate Desktop 開発入門講習会