カウントアップとループ処理②

カウントアップとループ処理②

使用:Excel application scope、Read Cell、Do While


1.前回作ったフローをそのまま使用。test.xlsxのA1を読み込むだけだったので、「 A1を読み込んだ後、YESならA2を読み込む」という処理に変更する。A1→A2→A3と数字が変わっていくので、assignで数字の部分をcountに入れる。


2.A1を読み込んだ後にA2を読み込みに行きたい。つまりReadCellもループの中に入れなければいけないので、前回は外に出ていたRead CellをDo Whileの中に入れる。


3.ReadCellの参照セルがA1の固定になっているので、ここが動くように数字の部分を変数に変える。最初に設定したcountには1が入っているので、"A"+countに変更すると、A1になる。


4.この状態で動かしても、count=1としか設定がされておらず、相変わらずA1しか見に行かないので、countを動かす設定を加える。assignでcount = count + 1 と設定。これでメッセージボックスを表示した後のセルは、A2となる。

この時点での動きは下記の通り。

 ①メッセージボックスでA1の内容を表示し、Yes/Noを選ぶ。

 ②Noを選ぶと終了。Yesを選ぶとA2を表示し、Yes/Noを選ぶ。以降A3A4と繰り返し。


5.上記の通りとりあえずは動くので、ここで一度実行。


6.3回目まではちゃんとループしてますが、4回目でメッセージが無くなりました。しかもずっと続く。エクセルを確認すると、画像の通り。


7.このままでは、セルの内容が無くなってもyesを押し続ければ続いてしまうので、Noを押す以外の、Do Whileの終了条件をもう一つ設定する。

条件式に「AND result <> "" 」を追加。「セル(result)に何か入っている限り続く」という意味になります。


8.これで動かすと、一応no以外でも止まりますが、それでも止まるのは4回目(空白)の表示後。


理由は処理が次のようになっている為。

■3回目の処理時点

①read cellで、result=A3 にする。(countが前の2回で+2されている)

②messageで、result(A3)を表示する。

③assignで、countを+1する。(resultはA3のまま)

④dowhileで、選択がyesかresult(A3)が空白でなければループを続ける判断をする。

つまり、ループの判断時に空白のA4ではなく、A3を見ている為。


9.止める方法はいくつかありますが、一つの方法として、ループ判断の前にReadCellをコピーをして入れる。こうすることで、この時点のcountは前項目の③で+1された後なので、read cellはA4を読み込み、resultに空白を入れることになる。


回避方法については知識がほぼ無いので、詳しい方であればもっと効率的な方法を思いつくと思います。再宣言方法、条件式、そもそもの流れなど、ご教授頂ければ幸いです。


関連記事:Step Intot(デバッグ)  処理の検証について

uipathメモ

uipathの操作手順メモです。条件式や変数、VB.NET等の知識はほぼありませんので、分からないなりの操作方法になっています。適切な変数や配列、VB.NET等を使用する事で遥かに工数が減る部分もあると思いますので、その際はご教授頂けますと幸いです。