RPA学習資料

【RPA入門】UiPathの使い方4~Excelリストを用いた繰り返し処理

uipath repetitive processing

RPAの入門として、UiPathの使い方を紹介していきます。今回は、キーワードが記載されたExcelリストを用いて、Webサイト上で繰り返し検索し、取得したデータをExcelリストに書き込む処理を自動化したいと思います。

1. UiPathの初期設定

【RPA入門】UiPathの使い方1~Webデータ取得(テキスト編)」の記事のStep.1からStep2までを実行してください。

 

2. Excelリストの作成

先ずは、繰り返し処理に用いるExcelリストを作成します。リストの項目は以下の4つとします。ファイル名は「リスト.xlsx」、シート名は「リスト」にします。

  • 都道府県
  • キーワード
  • イベント件数
  • サンプル(イベント題名)

事前に記載した「都道府県」と「キーワード」を使い、Webサイト上でイベント情報を検索していきます。そして、検索結果から取得したイベントの件数をExcelリストのC列に、一番上に表示されたイベントの題名をD列に書き込むようにします。

create excel list

 

3. UiPathのワークフロー構築

【Step.1】Mainワークフローを開く

ワークフローを構築していくために、画面左下の「Activities」タブを選択し、画面中央の「Open Main Workflow」をクリックします。

open main workflow

 

【Step.2】Excelリストを開く

作成したExcelリストを開くために、「Excel Application Scope」アクティビティを使用します。画面左側のアクティビティ検索窓に「excel」と入力します。表示された「Excel Application Scope」を、ワークフロー内にドラッグ&ドロップします。

続けて、アクティビティのプロパティ設定を行います。フォルダアイコンをクリックして、開くExcelリスト(リスト.xlsx)を指定します。以降は、「Excel Application Scope」のDoコンテナ内に、実行したい処理を追加していきます。

open excel list

 

【Step.3】Excelリストのデータを読み込む

Excelリストのデータを読み込むために、「Read Range」アクティビティをDoコンテナ内にドラッグ&ドロップします。

read excel list

 

続けて、アクティビティのプロパティ設定を行います。シート名(SheetName)には「リスト」と入力し、範囲(Range)は空白のままにしておきます。通常、範囲は「A1:C5」などの表記で指定しますが、空白にすることで、シート内の全データが自動で読み込まれます。なお、文字列を入力する際は、全体をダブルクオーテーションで括る必要があります(”文字列…”)。

読み込んだリストを保存する変数(DataTable)には、「searchList」という名称の変数を新規作成してセットします。変数を新規作成する場合は、入力欄で「Ctrl + k」を押し、「Set Name:」に続けて変数名を入力し、最後にエンターキーで確定します。これで、リストが変数searchListに保存されます。具体的には、下記のような二次元配列となります。

searchList = [
  ["東京都", "AI", "", ""],
  ["大阪府", "Python", "", ""],
  ["東京都", "Python", "", ""]
]

 

【Step.4】Webブラウザの起動

Webブラウザを起動して、こちらのWebサイトにアクセスします。ブラウザはこのまま開いておきます。

open web site

 

Webブラウザを開くには、「Open Browser」アクティビティを使用します。画面左側のアクティビティ検索窓に「open」と入力します。表示された「Open Browser」を、ワークフロー内の「Read Range」の直下にドラッグ&ドロップします。

続けて、アクティビティのプロパティ設定を行います。URL(Url)には、先ほど開いたWebサイトのURLを入力します。ブラウザの種類(BrowserType)は、お使いのブラウザの種類を選択します。これで、Webサイトをブラウザで開く準備ができました。

open browser

 

【Step.5】リスト内のデータを1行ずつ処理

最終的には、リスト内のデータを1行ずつ取り出して、順にWebサイト上で検索していきたいです。変数searchListに保存されたリストからデータを1行ずつ取り出すために、「For Each Row」アクティビティを使用します。

画面左側のアクティビティ検索窓に「foreach」と入力します。表示された「For Each Row」を、「Open Browser」のDoコンテナ内にドラッグ&ドロップします。

for each row

 

続けて、アクティビティのプロパティ設定を行います。繰り返すデータ(DataTable)には、「searchList」を入力します。変数searchListに保存されたリストから1行ずつデータを取り出し、順に変数rowに代入され、「For Each Row」のBodyコンテナ内で変数rowの値を参照することができます。

繰り返し回数(index)には、「count」という名称の変数を新規作成してセットします。これは、繰り返し処理が今何回目かを知るための値です。ここにセットした変数に、0→1→2→・・・と数字が入っていきます。プログラミングの慣習として、0からカウントされます。

今回のケースでは、リストに3行のデータがあるため、「For Each Row」のBodyコンテナ内の処理が3回繰り返されます。処理を実行する度に、変数rowには、「”都道府県”, “キーワード”, “”, “”]の一次元配列が順に代入されます。

 

【Step.6】Webブラウザを閉じる

少し先回りして、Webブラウザを閉じる処理を追加しておきましょう。開いたWebブラウザを閉じるには、「Close Application」アクティビティを使用します。画面左側のアクティビティ検索窓に「close」と入力します。表示された「Close Application」を、ワークフロー内の「For Each Row」の直下にドラッグ&ドロップします。

今回のような「繰り返し処理」のワークフローを作る際のポイントとしては、「For Each Row」を「Open Browser」と「Close Application」でサンドイッチすることです。「For Each Row」の内側に、「Open Browser」と「Close Application」を入れると、処理が繰り返される度に、ブラウザが開閉してしまい、負荷が大きくなってしまいます。

close browser

 

【Step.7】Webレコーディングの準備

では、いよいよWebサイト上での検索処理を実装していきます。Webブラウザの操作を自動記録させるために、Webレコーディングを起動させます。上部パネルの「Recording > Web」を選択します。

open recording panel

 

【Step.8】Webレコーディングの開始

【RPA入門】UiPathの使い方1~Webデータ取得(テキスト編)」の記事のStep.6を実行してください。今回は、都道府県は「東京都」、キーワードは「AI」とします。

 

【Step.9】データの取得

ブラウザ上に表示されたデータを取得するためには、「Esc」キーを押して、一度Webレコーディングモードを解除します。

「Esc」キーを押すと、Webレコーディングモードが解除され、再び「Web Recording」パネルが表示されます。この状態での操作は記録されません。データを取得するために、「Copy > Copy Text」を選択します。

copy text

 

そして、イベント情報欄に表示されているイベント件数をクリックします。これでイベント件数を取得することができました。

get event numer

 

続けて、もう一度、データを取得するために、「Copy > Copy Text」を選択します。そして、検索結果の一番上に表示されたイベント題名をクリックします。これで、サンプルのイベント題名を取得することができました。

get sample event

 

【Step.10】Webレコーディングの終了

「Web Recording」パネルの「Save & Exit」を押して、今まで記録してきたワークフローを出力します。

save and exit

 

【Step.11】ワークフローの編集

レコーディングで記録した検索処理のワークフローが、「Close Application」の直下に作成されています。この検索処理は1回分なので、繰り返し処理されるように、「For Each Row」のBodyコンテナ内に移動させます。

move workflow

 

正しく移動できれば、下記のような位置関係になるはずです。

position after move

 

【Step.12】都道府県とキーワードの再設定

これで完成と思いきや、このままではワークフローを実行しても、3回とも同じ都道府県とキーワードで検索されてしまいます。Excelリストの各行の都道府県とキーワードで繰り返し検索されるように調整しなければいけません。下図を見てください。

list data

 

「For Each Row」では、各行のデータが変数rowに代入されます。各行のデータから、都道府県とキーワードを参照するには、下記のように記述します。変数rowの各アイテム(Item)を取り出す形です。最後のToString()はデータの型を文字列に変換するメソッドです。この辺りは深く気にせずに、おまじないと思って割り切りましょう。

row.Item("都道府県").ToString()
row.Item("キーワード").ToString()

 

では、「For each Row」のBodyコンテナ内の、「Select Item」および「Type Into」アクティビティのプロパティ設定を行います。先ずは、「Select Item」のアイテム(Item)を、「row.Item(“都道府県”).ToString()」に変更します。次に、「Type Into」のテキスト(Text)を「row.Item(“キーワード”).ToString()」に変更します。これで完成です。

edit row item

 

【Step.13】変数名の変更

「For Each Row」のBody内の、一つ目の「Get Text」アクティビティを選択します。画面下側の「Variables」タブをクリックして、既に定義した変数の名称や型を編集します。この変数管理画面で編集すると、ワークフロー全体に変更が反映されます。

edit variable name

 

Webレコーディングで、「Copy Text」機能を使用した場合は、自動で変数が作成されます。基本的に、変数名はその中身を推測できる名称をつけるべきです。変数名をダブルクリックして、以下のように変数名を変更しましょう。

【イベント件数】P → eventNum
【サンプルのイベント題名】AHttpsIotlabConnp → sampleEventName

 

【Step.14】取得データをExcelリストに書き込む

ワークフローの最後に、取得したデータ(イベント件数とサンプルのイベント題名)をExcelリストに書き込む処理を追加します。画面左側のアクティビティ検索窓に「excel」と入力します。表示された「Write Cell」アクティビティを、ワークフロー内の「Get Text」の直下に2つドラッグ&ドロップします。

write data

 

アクティビティのプロパティ設定を行います。それぞれ以下の通りに入力してください。これで、ExcelリストのC列にイベント件数を、D列にサンプルのイベント題名を書き込むことができます。

▼ 1つ目のWrite Cell
【シート名(SheetName)】"リスト"
【範囲(Range)】"C" + (count + 2).ToString()
【値(Value)】eventName
▼ 2つ目のWrite Cell 【シート名(SheetName)】"リスト" 【範囲(Range)】"D" + (count + 2).ToString() 【値(Value)】sampleEventName

 

ポイントは範囲の書き方です。検索処理が繰り返される度に、1行ずらしながらExcelリストにデータを書き込んでいきます(C2→C3→C4・・・)。これには、変数countを利用してます。なお、Excelリストの2行目から書き込むため、+2して下駄を履かせています。ToString()は数字を文字に変換するためのおまじないです。

 

【Step.15】ワークフローの実行

上部パネルの「Debug File > Run」をクリックし、このワークフローを実行してみましょう。

run workflow

 

如何でしょうか。Webブラウザが起動して、都道府県とキーワードを入力して、検索を実行していくと思います。ただし、途中で下記のようなエラーが発生して処理が止まってしまうと思います。

error message

 

エラーの原因を分析してみましょう。メッセージに、「Cannot find the UI element corresponding to this selector」との記載があります。また、イベント題名らしき文も書かれています。おそらく、サンプルのイベント題名を取得する際のセレクタに問題があると考えられます。おおよその原因が特定できたので、ここからは問題の解決に移行します。

 

【Step.16】セレクタの修正

「For Each Row」のBody内の、二つ目の「Get Text」アクティビティを選択します。そして、プロパティ画面の「Target > Selector」の設定ボタンをクリックします。

open selector editor

 

セレクタの編集画面が開きます。「セレクタ」を簡単に説明すると、Webサイト上の要素を指し示す目印のようなものです。この目印を適切に設定しなければ、要素をクリックしたり、取得することができません。この目印は曖昧過ぎても、具体的過ぎてもいけません。

edit selector

 

今回のケースでは、セレクタに固有のイベント題名が入ってしまっており、そのイベント題名以外は取得できなくなっていました。検索を繰り返す度に、取得するイベント題名は変化します。従って、どのようなイベント題名でも問題なく取得できるようにセレクタを修正する必要があります。修正方法は幾つかありますが、セレクタの一番下の要素の属性(aaname)の値を、「*」に変更してみましょう。「*」はワイルドカードといって、どのような値がきてもオールマイティに対応してくれるようになります。

 

【Step.17】ワークフローの再実行

では、再び、上部パネルの「Debug File > Run」をクリックし、このワークフローを実行してみましょう。今度は途中で止まることなく、検索処理を繰り返すと思います。処理が終わった後に、Excelリストを開いてみましょう。各行の「都道府県」と「キーワード」に対して、イベント件数とサンプル(イベント題名)が取得できています。

result

 

チャレンジ課題

課題1

取得したイベント件数が「検索結果(?件)」となっています。Excelリストには、「?件」とだけ書き込まれるようにしましょう。ヒントは、「Write Cell」アクティビティで書き込む値を加工できないか考えてみましょう。

課題2

検索結果が0件となる「都道府県」と「キーワード」の組合わせをExcelリストに入れて、ワークフローを実行してみましょう。0件の場合は、エラーが発生するか、ExcelリストのD列に、正しくない結果が書き込まれると思います。検索結果が0件の場合は、D列には「該当データなし」などを書き込むようにしましょう。ヒントは、条件分岐のIfアクティビティが必要になります。

 

まとめ

今回は、キーワードが記載されたExcelリストを用いて、Webサイト上で繰り返し検索し、取得したデータをExcelリストに書き込む処理を自動化しました。

下記の点を理解して、他の業務にも応用できるようにしましょう。

  • Webレコーディングを使用した自動記録
  • 「Excel Application Scope」を使ってExcelファイルを開く
  • 「Read Range」を使ってExcelリストを読み込む
  • 「For Each Row」を使った繰り返し処理
  • 「Write Cell」を使ってExcelリストに書き込む

最後に、UiPathに関する参考図書を一冊紹介しておきます。
できるUiPath 実践RPA <amazon.co.jp>

※本書の内容はネット上でも公開されているようです(できるネット)。

より深く「RPA」を学びたい方は、スクールでオンライン講義もやっていますので、良かったらこちらの記事もご覧ください。