こんにちは。ホームスタッフサービスのT上です。

さて、弊社ではRPAツールのひとつ「UiPath」を使用しています。
UiPathはプログラミングの知識がなくても作成できるため、文系出身者でも開発しやすいと言われています。私も文系出身ですが、入社1年ちょっとでUiPathの開発に携わっています。

そんな私がUiPathについて学ぶ中で、最初に「どういうことか分からん……!」と頭を悩ませたもの、それが「繰り返し」のアクティビティです。

試行錯誤しながら「繰り返し」のアクティビティを使う中で、少しずつですがそれぞれの違いが分かってきました。今回はその違いについてお話ししたいと思います。

繰り返しについて

何度も同じ動作を行うロボットを作成する場合、毎回同じことを設定するのは無駄に感じますよね。その場合は一定の回数だけ同じ動作を繰り返すように作ります。
UiPathで動作を繰り返すロボットを作成する方法は、大きく分けて5つあります。

  • フローチャート内で矢印線を接続して繰り返す
  • 「繰り返し(前判定)」を使用する
  • 「繰り返し(後判定)」を使用する
  • 「繰り返し(コレクションの各要素)」を使用する
  • 「繰り返し(各行)」を使用する

矢印線を接続する方法以外はアクティビティを使用して繰り返しを行います。
アクティビティを使用する場合も、「どの条件(あるいは範囲)で繰り返しを行うのか」「繰り返すかどうかをいつ判定するのか」などによって使用するアクティビティが変わってきます。

それでは、それぞれの方法について簡単に説明します。

フローチャート内で矢印線を接続して繰り返す

フローチャート内では、各アクティビティを矢印線で接続することで一連のワークフローにしています。この時、矢印線を前のアクティビティに接続するだけで繰り返しの設定ができます。しかし単に接続するだけだと延々と繰り返されてしまうので、繰り返しを終了する条件の設定が必要です。

繰り返し終了の条件を設定するためには「フロー条件分岐」アクティビティを使用します。
「フロー条件分岐」では設定した条件に対し、Trueと判定された時Falseと判定された時で異なる動作を指定することができます。例えば「Falseと判定された時は前のアクティビティに戻って繰り返しを行い、Trueと判定された時は繰り返しを抜けて次の動作に移る」という流れを作ることが可能です。
TrueまたはFalseの時だけ繰り返すように設定することで、延々と繰り返されるのを避けることができます。

「フロー条件分岐」を使用してフローチャート内で矢印線を接続して繰り返すワークフローの例を見てみましょう。
下の画像は、フローチャートで作成した数当てゲームのワークフローです。

フローチャート内で矢印線を接続して繰り返す例

※クリックで大きな画像が開きます。

まず「New Random().Next(0,10)」を使って乱数を生成した後、入力ダイアログで数字を入力するように求めます。次に入力された数字が生成した乱数と一致するかどうかを「フロー条件分岐」で判定します。
判定がTrueとなった場合は、メッセージを表示した後動作を終了します。Falseとなった場合は、メッセージを表示した後数字の入力から繰り返すように設定されています。

このように矢印線を接続することで、乱数を当てるまで入力を求めるようなロボットが作成できます。

「繰り返し(前判定)」を使用する

「繰り返し(前判定)」は、条件に合う場合(判定がTrueとなった場合)にのみBody内の動作を繰り返し行うアクティビティです。条件に合わない場合(判定がFalseとなった場合)にはBody内の動作が行われません。条件にはBoolean変数やTrueFalseを返す式を設定します。

”前判定”という名前の通りBody内の動作を行う前に判定を行い、判定がTrueとなった場合のみ動作を行います。動作を行った後はもう一度判定するところから繰り返します。
Falseと判定されたらBody内の動作を行わずに次のアクティビティへ移ります。もし最初の判定がFalseとなればBody内の動作は一度も行われません

下の画像の緑枠の部分が条件を入力する場所で、赤枠の部分がBodyです。Bodyにアクティビティを配置することで繰り返す動作を設定できます。Bodyは「本体」と表示されている場合もあります。「繰り返し(前判定)」ではBodyの上に条件を入力する場所があります。
下の画像では、条件「count<1」の時「1行を書き込み」「代入」のアクティビティを繰り返すように設定されています。

「繰り返し(前判定)」の例

「繰り返し(前判定)」では、上に条件を入力する場所が、下にアクティビティを配置する場所がある。

 

「繰り返し(後判定)」を使用する

「繰り返し(後判定)」は、条件に合う場合にのみBody内の動作を繰り返すアクティビティです。Body内の動作を行った後に判定を行い、条件に合わない場合は動作を繰り返しません。「繰り返し(前判定)」と同様、条件にはBoolean変数やTrueFalseを返す式を設定します。

「繰り返し(後判定)」の場合は動作を行った後に判定が行われるため、必ず一度動作が行われます。その後、判定がFalseとなれば繰り返さずに次のアクティビティへ移ります。判定がTrueとなった場合は再びBody内の動作が行われます。

下の画像の赤枠の部分がBodyで、緑枠の部分が条件を入力する場所です。「繰り返し(後判定)」ではBodyの下に繰り返しの条件を入力する場所があります。
下の画像では、条件「count<1」の時「1行を書き込み」「代入」のアクティビティを繰り返すように設定されています。

「繰り返し(後判定)」の例

「繰り返し(後判定)」では、上にアクティビティを配置する場所が、下に条件を入力する場所がある。

「繰り返し(前判定)」「繰り返し(後判定)」の違いについては、後日改めて詳しく解説します。

「繰り返し(コレクションの各要素)」を使用する

「繰り返し(コレクションの各要素)」は、「コレクション」で指定したデータの型の要素ごとに動作を繰り返すアクティビティです。「コレクション」には主に配列型やリスト型の変数を設定します。フォルダの中のファイルに対して処理を行う場合や、作成したリストごとに処理を行う場合に便利です。

下の画像の緑枠の部分が「コレクション」です。ここに入力した変数の要素ごとに動作が行われます。また、赤枠の「本体(Body)」の部分に繰り返したいアクティビティを配置します。
下の画像では、配列型変数String_Arrayの要素ごとに「1行を書き込み」アクティビティを繰り返すように設定されています。

「繰り返し(コレクションの各要素)」の具体例

「コレクション」に配列型やリスト型の変数を入力し、「本体」に繰り返したいアクティビティを配置する。

詳しくは、後日改めて解説します。

「繰り返し(各行)」を使用する

「繰り返し(各行)」は、データテーブルの行ごとに動作を繰り返すアクティビティです。Excelの表やデータスクレイピングで取得したデータテーブルに対して使うことができます。「コレクション」には主にデータテーブル型の変数を設定します。

下の画像の緑枠の部分が「コレクション」です。ここに入力したデータテーブルの行ごとに動作が行われます。また、赤枠の「本体(Body)」の部分に繰り返したいアクティビティを配置します。
下の画像では、データテーブル型変数dtbの行ごとに「1行を書き込み」「代入」のアクティビティを繰り返すように設定されています。

「繰り返し(各行)」の例

「コレクション」にデータテーブル型の変数を入力し、「本体」に繰り返したいアクティビティを配置する。

詳しくは、後日改めて解説します。

まとめ

一口に「繰り返し」といっても、その方法はさまざまです。同じ条件でもアクティビティの使い方によっては、うまく動かなかったり複雑な作りになったりしてしまいます。
それぞれの特徴を理解して、状況にあった方法を使いましょう。

次回は「繰り返し(前判定)」「繰り返し(後判定)」の違いについて詳しく解説します。