前回までで、Microsoft Excelの先頭行と最終行からPower Automateを使ってデータを取り出す方法を取り上げた。今回は、中間の行についてもデータが取り出せる「ループ」処理について取り上げていく。
繰り返し処理を使う「ループ」
データを処理する際、同じような処理を繰り返し行うケースがある。これはプログラミング言語には必須の機能であり、Power Automateにも用意されている。Power Automateでは「ループ」という名称だ。
ここでは前回まで使ってきた都道府県の郵便番号データの全ての行を繰り返し処理してみよう。
(参考「読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便」)
特に意味のない処理になるが、ループを試すために「1列目のデータを数字とみなして、それらを全て加算する」という処理を行うことにする。Microsoft Excelの場合には次のスクリーンショットのように「=SUM(A1:A124665)」でこの値を求めることができる。
次のスクリーンショットのように合計値は「2603005895」になるようだ。
前回までに取り上げてきたPower Automateの使い方にのっとれば、1列目のデータを1行目、2行目、と順に取り出して行って、それを加算していくことになる。最終的に「2603005895」の値が得られればよい。
ループを使った処理をつくる
それではループを使って「2603005895」の値を得る処理を作ってみよう。まず、前回のフローを表示させる。
このフローの「4 Excelワークシートから読み取る」の上か下に「ループ(Loop)」のアクションを追加する。
「ループ」は繰り返し処理を行うためのアクションだ。何回繰り返すかを指定できる。ここでは1行目からデータの最後の行まで処理を繰り返したいので、開始値に「1」を指定し、終了に最後の行の番号が収められている「%LastRow%」を指定する。
加えて、全ての行に対して処理をすべく、増分に「1」を指定する。これで1、2、3、・・・、%LastRow%まで繰り返し処理が行われていく。
上記スクリーンショットのように、繰り返しの間は%LoopIndex%に「開始値」から「終了」までの値が収められる。これが「ループ (Loop)」アクションの機能だ。
そして「Excel ワークシートから読み取る」を「ループ」アクションの中へ移動させて、その中身を次のように変更しておこう。
読み取るデータを先頭列「1」、先頭行「%LoopIndex%」に設定する。%LoopIndex%の値は「ループ(Loop)」アクションによって1から順に%LastRow%まで処理が行われる。
ここまでの編集でフローは次のようになる。
上記スクリーンショットのように「ループ」のアクションに「Excel ワークシートから読み取る」のアクションが入っていることを確認しよう。入っていなければドラッグ&ドロップでここへ移動させておく。このように「ループ」で繰り返し処理をさせたいアクションを「ループ」アクションの中にはめ込むような感じになる。
ループを使った処理を完成させる
1列目の値の合計値を求めたいので、それを格納するための変数を用意する。4番目に「変数の設定」アクションを追加する。最初は値を「0」にしておく。ここで用意する変数は「%SumValue%」とした。ループの外で作っておく必要がある点に注意しよう。
そしてループの中でセルの値を取り出した後、次のように変数に対して取得したセルの値を加算する処理である「変数を大きくする」アクションを追加する。
セルの値は「%ExcelData%」に入っているので、これを「%SumValue%」に加えるようにアクションを設定している。
編集後のフローは次のようになる。ループの中に2つのアクションが入っていることを確認できる。
最後に合計値を表示するように「メッセージを表示」アクションを編集する。
ここまで編集するとフローは次のようになる。
それでは早速動作させてみよう。
動作を確認
一連のフローはPower Automateで自動化するときの重要なことを教えてくれる。
まず、フローを実行させる。スクリーンショットなのでわかりにくいが、次のスクリーンショットで5、6、7、8、の処理をぐるぐる繰り返していく。右側にある「フロー変数」のところを見ると、LoopIndexとSumValueの値がぐるぐると増えていくことを見ることができる。
処理は正しく機能している。問題は時間だ。次に示すのが、4分ほど待った後で撮ったスクリーンショットだ。LookIndexもSumValueも値が増えている。
データが123,665行あることを考えると、筆者の計測では492行目時点では3分52秒なので、単純計算で処理が終わるまで16時間以上かかる。Power Automateで自動化できるといっても、16時間もかかっていては使い物にならない。
Power Automateは「人間の自動化」ということ
今回のサンプルからは、Power Automteによる効果が期待できるのは、主に「人間が操作する作業の自動化」であることが分かる。
123,655行にわたるデータを人間が手動で計算する場合、膨大な時間がかかってしまうだろう。Power Automateで自動化することでそれが16時間強くらいになるとすれば高速化はされているものの、実用的だとは言えない。Microsoft Excelの関数を使えば、一瞬で終わる処理だ。つまり、今回のサンプルのような処理は、そもそもPowerAutomateによる自動化に向いていないのである。
Power Automateはあくまでも人間の操作を自動化するためのローコードツールであって、汎用的なプログラミングツールではないということを認識しておこう。