ログインすると広告表示が消えます
繰り返し処理を使用する
Excelのチュートリアルの中で、DataTableの変数を使用しました。
これは、1つの変数の中に複数のデータが入っているものでした。
Excelの操作の中では、1セルずつ値を取得しましたが、何千件というデータがある場合、これを作ることは非常に大変です。
そこで、ループ処理と呼ばれる繰り返し操作を行うことで、連続して処理を行うことが可能です。
ループの基本的な考え方は、変数が1行ずつ変わっていく、というものです!
X=1 → X=2 → X=3 → X=n
まずは、この基本的な考え方を覚えましょう!
事前準備
今回は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行目というように、セル結合を行っているケースにも対応することができます。
ログインすると広告表示が消えます