こんにちは、K田です。
RPAを使って「Amazonにある書籍の価格を調べる」ことをやってみる。前回は前準備とKindle版の価格と書籍版の価格の取得を行いました。

トライRPA! UiPathで本の価格調査 Part.1

トライRPA! UiPathで本の価格調査 Part.2

今回はそのPart.3です。

今回やること

前回、全体の工程を4つに分けました。

  1. 初期設定……ワークフローで使う変数の設定と準備
  2. 価格のスクレイピング……AmazonのHPから価格を取得して整形
  3. Excelへの書き込み……結果を書き込むExcelを開いて目標の行に変数を書き込む
  4. ウインドウを閉じる……AmazonのHPのブラウザ(Chrome)を閉じる

前回は「1.」「2.」をやりましたので、今回は「3.」「4.」の部分をやってみます。
UiPath上での各工程がどこに当たるのかを図示してみました。黄枠の部分が今回の工程「3.」「4.」に相当します。

ワークフロー全体図パート3

Excelへの書き込み

AmazonのHPから取得した本の価格をExcelに書き込む処理を行います。下記で示した通り、順に説明していきます。

  • Excelを開く
  • 書き込むセル位置を確定させる
  • セルに取得した値を書き込む

Excelを開く

まずはじめにExcelを開く処理を行います。Excelを開くにはアクティビティ「Excelアプリケーションスコープを使用します。

Excelアプリケーション

開きたいExcelのフルパスを「””」ダブルクォーテーションで挟み、赤枠内に入力します。自分が開きたいExcelを指定して開くことができるので、「Excelを開く」はこれで実現できます。

黄色枠内には開いたExcelに対して行う操作のアクティビティを入れていきます。「セルを読み込む」「セルを書き込む」「ブックの保存」などいろいろできます。
しかし注意すべき点は、「黄色枠内にアクティビティを配置する必要がある」ということです。アクティビティをうっかり枠外に出さないように注意しましょう。

書き込むセル位置を確定させる

次に書き込むセル位置を確定させる処理を行います。

下図の例ですと、1行目と2行目はタイトルと項目名で使用しているため、3行目のセル「A3」から順に「A3、A4、A5…」とセル内が空欄かどうか調べていきます。
セル「A6」が初めの空欄なので、書き込むセルは「A6」に確定できます。

方法はいろいろありますが、今回はアクティビティ「繰り返し(後判定)を用いて、特定のセルから順に1つ下のセルを調べます。
空欄のセルが見つかれば、そこが書き込むセルになります。結果的に「最終行の取得」と同じになります。

完成したワークフローは以下の通りです。

完成図

繰り返しには今回はアクティビティ「繰り返し(後判定)を使用します。条件式は「temp_value<>””」です。

繰り返し(後判定)

条件式について補足しましょう。

<>

「<>」の記号は「~ではない」という条件式です。

""

「”(半角ダブルクォーテーション)」を2つ入力すると「空白(空欄)」という意味になります。

以上のことより調べたセル(temp_value)が空欄ではない(<>””)という条件になります。この条件に合うまで「カウントアップ」と「セルを読み込み」を繰り返すことになります。
これで書き込むセルが確定します。最後に取得した値を書き込めば完了です。

ひとつずつ行を下の方に移動していく操作を実現するために、アクティビティ「代入を使用します。

代入

左辺の変数「cnt_row」は行数を表しています。初期値は「2」に設定しています。
右辺は「cnt_row+1」でカウントアップしています。

カウントアップの挙動をもう少し詳しく説明します。

1回目
cnt_row」の初期値は「2」で設定していますので、1回目は
cnt_row」=「2+1」で「3」となりますので、3行目のセルが空欄かどうか調べます。

2回目
cnt_row」は1回目に「3」となりましたので、2回目は
cnt_row」=「3+1」で「4」となりますので、4行目のセルが空欄かどうか調べます。

3回目
cnt_row」は2回目に「4」となりましたので、3回目は
cnt_row」=「4+1」で「5」となりますので、5行目のセルが空欄かどうか調べます。

上記のように毎回行数を増やして下の行に移動するようにして、空欄セルが見つかるまで繰り返しを行います。

カウントアップ

タイトルと項目の見出し部分を除いた3行目から調べる設定にしています。

注目しているセルの内容を読み込むために、アクティビティ「セル読み込み」を使用します。

左辺の変数「save_excel_sheet_name」はシート名を表しています。初期値は「”価格”」に設定しています。
右辺「“A”+cnt_row.ToString」は(Aが列名)+(cnt_rowが行数)でセルの場所を表しています。
空欄セルの行数「cnt_row」が確定することで「書き込むセルが確定できた」と言えます。

セルに取得した値を書き込む

書き込むセルが確定できたので、最後に取得した値を書き込みましょう。

トライRPA! UiPathで本の価格調査 Part.2にて取得したデータ

  • 取得した日付「price_date
  • Kindle版の価格「price_kindle
  • 単行本版の価格「price_book

を使用します。

完成図が下図です。

Excel書き込み
Excel書き込みのワークフロー完成図

Excelセルにデータ入力するにはアクティビティ「セルに書き込み」を使用します。例えば取得日付の書き込みなら次のようになります。

セル書き込み

黄色枠でシート名、赤枠でセル位置、青枠で書き込む値を指定できます。

黄色枠「save_excel_sheet_name」はシート名を表しています。初期値はシート名である「“価格”」に設定しています。
赤枠“A”+cnt_row.ToString」は(Aが列名)+(cnt_rowが行数)でセルの位置を表しています。
青枠price_date」は取得した日付を表しています。

データの書き込み先であるExcel表は下記のようになります。

列名の表示

「日付」はA列、「Kindle版」はB列、「書籍版」はC列となっています。行数は同じなので、先ほど説明しましたセル位置を表す赤枠“A”+cnt_row.ToString」の列の部分(”A”)をB、Cのように指定すれば、重複することなく書き込みが可能です。今後、追加で列を挿入した場合、書き込む列が変わった場合は列「A、B、C」の部分のみ修正すれば対応できます。

ウインドウを閉じる

私は「ウインドウを閉じる」という作業を何度か忘れてしまったせいで、ウインドウが山のように溜まった経験があります。ウインドウは開き過ぎますとPCの動作環境に負担を与え、動作が遅くなる可能性があります。使わないウインドウは小まめに閉じるように心がけましょう。

ウインドウを閉じるには、アクティビティ「アプリケーションを閉じる」を使用します。「画面上で指定」をクリックすると、画像で閉じるウインドウを指定できます。

アプリケーションを閉じる設定前

画面全体が薄い青色に着色されます。今回は「アプリケーションを閉じる」なのでウインドウ全体をセレクターとします。これでクリックします。

閉じるウインドウ

指定するとアクティビティ「アプリケーションを閉じる」の画面上で指定の部分が画像にて指定できました。これで「ウインドウを閉じる」操作は完了です。

結果

以上により

  • Excelへの書き込み……結果を書き込むExcelを開いて目標の行に変数を書き込む
  • ウインドウを閉じる……AmazonのHPのブラウザ(Chrome)を閉じる

までのワークフローが出来ました。

下記が日付、Kindle版と書籍版の価格が記入されたExcel表になります。
本ワークフローを実行した結果、過去の履歴を消すことなく、7行目に書き込みがされています。

実行結果
※クリックすると、画像が拡大されます。

これで「UiPathを使って本の価格調査をする」という目的が達成できました。

さらに別ブログ「トライRPA! WorkFusionで本の価格調査 Part.3」と同じ結果が得られました。

発展とまとめ

今回の発展として、本以外の商品価格を調べることができます。例えば、家電製品などは価格の変動が大きいので、定期的に調査してグラフ化すると傾向が分かるでしょう。価格以外でも天気予報の気温や降水確率などを履歴データとして残すことも可能だと思います。

トライRPA! UiPathで本の価格調査 Part.1でも紹介したように、UiPathは画像認識による指定が多いので、これまでプログラミングの知識がない方でも導入しやすいツールになっております。「これからRPAをはじめよう!」とお考えの方にはオススメのツールです。まずは作って動かしてみて「自分が作ったロボットが動く感動」を体験いただきたいと思います。

また機会がありましたら、別のRPAを使った同じ操作を当ブログで紹介できればと考えております。

以上、最後まで読んでいただきましてありがとうございました。