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

pad repetitive processing

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

※参考より深く学びたい方は、スクールでオンライン講義もやっていますので、下記の記事もご覧ください。

【初心者歓迎・RPA個人講座】RPAを一から学ぶITスクール

1. Power Automate Desktopの初期設定

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

 

2. Excelリストの作成

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

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

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

excel list

 

3. Power Automate Desktopのフロー構築

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

作成したExcelリストを開くために、アクションを追加します。画面左側のアクション検索窓に「excel」と入力します。「Excelの起動」アクションを、フロー内にドラッグ&ドロップします。

open excel

 

すると、プロパティ設定の画面が開きます。「Excelの起動」には「次のドキュメントを開く」を指定して、「ドキュメントパス」には、Excelリストのファイルパスを入力します。

edit property of open-excel

 

【Step.2】Excelリストの範囲情報の取得

Excelリストの範囲情報を取得します。「Excelワークシートから最初の空の列や行を取得」アクションを、フロー内の「Excelの起動」アクションの直下にドラッグ&ドロップします。

get excel range

 

すると、プロパティ設定の画面が開きます。「Excelインスタンス」に「%ExcelInstance%」が設定されていることが確認できます。「%ExcelInstance%」は、【Step.1】で起動したExcelのインスタンス名です。生成された変数には、「FirstFreeColumn」と「FirstFreeRow」が設定されています。これらの変数には、Excelのシート内で最初に空となる列数と行数の値がそれぞれ格納されています。今回は、FirstFreeColumnの値は5、FirstFreeRowの値は5となります。

confirm property of excel-range

 

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

【Step.2】で取得したExcelリストの範囲情報を使用して、Excelリストのデータを読み込みます。「Excelワークシートから読み取り」アクションを、フロー内の「Excelワークシートから最初の空の列や行を取得」アクションの直下にドラッグ&ドロップします。

read range

 

すると、プロパティ設定の画面が開きます。下表の通りに各プロパティの値を編集します。続けて、「生成された変数」をクリックして、変数名が「%ExcelData%」になっていることを確認します。「生成された変数」には、読み込んだExcelリストのデータが格納されます。基本的に、変数名はその中身を推測できる名称をつけるべきです。今回は、「%searchList%」に変更します。

edit property of read-range

 

No.プロパティ項目設定する値
1取得セル範囲の値
2先頭列1
3先頭行1
4最終列%FirstFreeColumn – 1%
5最終行%FirstFreeRow – 1%
6範囲の最初の行に列名が含まれていますON

 

読み込んだExcelリストのデータは、具体的には下記のような二次元配列(3行×4列)となります。

searchList = [
 ["オンライン", "PHP", "", ""],
 ["オンライン", "RPA", "", ""],
 ["東京都", "もくもく", "", ""]
]

 

【Step.4】Webレコーダーによる記録

【RPA入門】Power Automate Desktopの使い方1~Webデータ取得(テキスト編)」の記事の【Step.3】から【Step.5】までを実行してから、続けて下記の処理を実行してください。なお、検索に使用する「都道府県」や「キーワード」は適宜変更して頂いて構いません。

 

【Step.5】検索結果の件数の取得

先ずは、検索結果の件数を取得します。ブラウザ上に表示されたテキストデータを取得するには、取得したいテキストデータにカーソルを合わせて右クリックします。そして、「要素の値を抽出」を選択し、一覧の中から「テキスト:(’・・・’)」をクリックします。これで検索結果の件数を取得することができました。

get event number

 

【Step.6】サンプル(イベント題名)の取得

次に、一番目に表示されたイベント題名を取得します。なお、連続でテキストデータを取得すると、操作内容が1つの「Webページからデータを抽出する」アクションに統合されるようです。この機能は、多くのデータを一括取得したり、ExcelやCSVに範囲書き込みする場合は便利です。しかし、取得したデータがテーブル型の変数に保存されるため、後に個別のデータを取り出す際は少しややこしくなります。

今回は分かりやすさを優先するために、【Step.5】と【Step.6】のアクションは分離させます。「Webレコーダー」パネルで、「コメント」を作成し、アクション間に挟み込むことで、アクションの統合を防ぐことができるようです。

add comment

 

では、改めて、一番目に表示されたイベント題名を取得します。ブラウザ上に表示されたテキストデータを取得するには、取得したいテキストデータにカーソルを合わせて右クリックします。そして、「要素の値を抽出」を選択し、一覧の中から「テキスト:(’・・・’)」をクリックします。これでイベント題名を取得することができました。

get event title

 

最後に、「Webレコーダー」パネルで、先ほど作成した一時的な「コメント」を削除しておきます。「ゴミ箱」ボタンをクリックして削除します。

delete comment

 

【Step.7】アクションの削除

フローを確認すると、「Webページのボタンを押します」のアクションが2つあることに気づきます。Webレコーダーで自動記録された際に、2回記録されたようなので、片方は削除します(※1つしかない場合は【Step.7】はスルーしてください)。該当するアクションにカーソルを合わせて右クリックし、「削除」メニューを選択すると、アクションが削除されます。

delete action

 

【Step.8】変数名の変更

フロー内の、1つ目の「Webページ上の要素の詳細を取得します」アクションをダブルクリックして、プロパティの編集を行います。

select first get-data

 

「生成された変数」をクリックして、変数名が「%innertext%」になっていることを確認します。「生成された変数」には、取得した検索結果の件数が格納されています。基本的に、変数名はその中身を推測できる名称をつけるべきです。今回は、「%eventNum%」に変更します。

edit property of first get-data

 

フロー内の、2つ目の「Webページ上の要素の詳細を取得します」アクションをダブルクリックして、プロパティの編集を行います。

select second get-data

 

「生成された変数」をクリックして、変数名が「%innertext_2%」になっていることを確認します。「生成された変数」には、取得したイベント題名が格納されています。基本的に、変数名はその中身を推測できる名称をつけるべきです。今回は、「%sampleEventName%」に変更します。

edit property of second get-data

 

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

最終的には、リスト内のデータを1行ずつ取り出して、順にWebサイト上で検索していきたいです。変数searchListに保存されたリストからデータを1行ずつ取り出すために、「For each」アクションを使用します。画面左側のアクション検索窓に「for」と入力します。「For each」アクションを、フロー内の「新しい(ブラウザ名)を起動する」アクションの直下にドラッグ&ドロップします。

for each

 

すると、プロパティ設定の画面が開きます。「反復処理を行う値」に「%searchList%」を入力します。このプロパティでは、繰り返し処理を行う対象として、リスト型やテーブル型の変数を指定します。

edit property of foreach

 

変数searchListに保存されたリストから1行ずつデータを取り出し、変数CurrentItemに代入されます。「For each」アクションの内部では、変数CurrentItemの各列の値を参照することができます。今回のケースでは、リストに3行のデータがあるため、「For each」アクションの内部の処理が3回繰り返されます。処理を実行する度に、変数CurrentItemには、[“都道府県”, “キーワード”, “”, “”]の一次元配列が順に代入されます。

 

【Step.10】フローの移動

Webレコーダーで記録した検索処理のフローは1回分なので、繰り返し処理されるように、「For each」の内部に移動させます。

move foreach before

 

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

move foreach after

 

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

これで完成と思いきや、このままではフローを実行しても、3回とも同じ都道府県とキーワードで検索されてしまいます。Excelリストの各行の都道府県とキーワードで繰り返し検索されるように調整しなければいけません。下図を見てください。「For each」アクションでは、各行のデータが変数CurrentItemに代入されます。各行のデータから、都道府県とキーワードを参照するには、「CurrentItem['都道府県']」や「CurrentItem['キーワード']」などのように記述します。

view excel list

 

先ずは、「For each」アクションの内部の、「Webページでドロップダウンリストの値を設定します」アクションをダブルクリックします。

select dropdown

 

すると、プロパティ設定の画面が開きます。「オプション名」を「%CurrentItem['都道府県']%」に変更します。

edit property of dropdown

 

次に、「For each」アクションの内部の、「Webページ内のテキストフィールドに入力する」アクションをダブルクリックします。

select type-text

 

すると、プロパティ設定の画面が開きます。「テキスト」を「%CurrentItem['キーワード']%」に変更します。これで完成です。

edit property of type-text

 

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

処理の最後でWebブラウザを閉じるように、アクションを追加しておきたいと思います。画面左側のアクション検索窓に「閉じる」と入力します。「Webブラウザを閉じる」アクションを、フロー内の「For each」アクションの「End」の直下にドラッグ&ドロップします。

close browser

 

すると、プロパティ設定の画面が開きます。「Webブラウザインスタンス」に「%Browser%」が設定されていることを確認して、そのまま「保存」ボタンをクリックします。

confirm property of close

 

【Step.13】カウンタ変数の作成

Webサイトから取得した各データを、Excelリストに行数をずらしながら順に書き込んでいくために、カウンタ変数を作成します。画面左側のアクション検索窓に「変数」と入力します。「変数の設定」アクションを、フロー内の「For each」アクションの直前にドラッグ&ドロップします。

set variable

 

すると、プロパティ設定の画面が開きます。「設定」を「%count%」に変更して、「宛先」には「2」と入力します。これで、変数countが作成されました。初期値を2にした理由は、Excelリストの2行目からデータを書き込むためです。(※1行目は項目名のため)

edit property of variable

 

【Step.14】カウンタ変数のインクリメント

「For each」アクションの内部の処理が繰り返される度に、カウンタ変数の値を1増やす(インクリメント)必要があります。「変数を大きくする」アクションを、フロー内の「For each」アクションの「End」の直前にドラッグ&ドロップします。

increment variable

 

すると、プロパティ設定の画面が開きます。「変数名」には「%count%」と入力して、「大きくする数値」には「1」と入力します。

edit property of increment

 

【Step.15】イベント件数をExcelリストに書き込む

取得したイベント件数をExcelリストに書き込む処理を追加します。画面左側のアクション検索窓に「excel」と入力します。「Excelワークシートに書き込み」アクションを、フロー内の「Webページ上の要素の詳細を取得します」アクションの直下にドラッグ&ドロップします。

write first data

 

すると、プロパティ設定の画面が開きます。下表の通りに各プロパティの値を編集します。

edit property of write first

 

No.プロパティ項目設定する値
1書き込む値%eventNum%
2書き込みモード指定したセル上
3C
4%count%

 

【Step.16】イベント題名をExcelリストに書き込む

取得したサンプルのイベント題名をExcelリストに書き込む処理を追加します。「Excelワークシートに書き込み」アクションを、フロー内の「Excelワークシートに書き込み」アクションの直下にドラッグ&ドロップします。

write second data

 

すると、プロパティ設定の画面が開きます。下表の通りに各プロパティの値を編集します。

edit property of write second

 

No.プロパティ項目設定する値
1書き込む値%sampleEventName%
2書き込みモード指定したセル上
3D
4%count%

 

【Step.17】Excelリストを閉じる

最後にExcelリストを閉じます。「Excelを閉じる」アクションを、フロー内の「Webブラウザを閉じる」アクションの直下にドラッグ&ドロップします。

close excel

 

すると、プロパティ設定の画面が開きます。「Excelインスタンス」に「%ExcelInstance%」が設定されていることが確認できます。「%ExcelInstance%」は、【Step.1】で起動したExcelのインスタンス名です。「Excelを閉じる前」を「ドキュメントを保存」に変更します。

edit property of close-excel

 

【Step.18】フローの実行

上部の「実行」アイコンをクリックし、このフローを実行してみましょう。なお、フローの作成画面から実行すると、「デバッグモード」で実行されるようで、処理速度が遅いです。実際の運用時には、管理画面から実行ボタンをクリックしてフローを実行しましょう。

run flow

 

如何でしょうか。Webブラウザが起動して、都道府県とキーワードを入力して、検索を実行していくと思います。処理が終わった後に、Excelリストを開いてみましょう。各行の「都道府県」と「キーワード」に対して、イベント件数とサンプルのイベント題名が取得できています。なお、検索結果が0件の場合は、エラー停止してしまうため、「都道府県」や「キーワード」を調整してください。

result

 

4. チャレンジ課題

課題1

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

課題2

【Step.5】と【Step.6】で、データを取得する操作を1つの「Webページからデータを抽出する」アクションに統合してみましょう。また、【Step.15】と【Step.16】で、Excelリストにデータを個別に書き込んでいる部分を、テーブルデータの範囲書き込みに変更してみましょう。

課題3

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

 

5. まとめ

今回は、キーワードが記載されたExcelリストを用いて、Webサイト上で繰り返し検索し、取得したデータをExcelリストに書き込む処理を自動化しました。下記の点を理解して、他の業務にも応用できるようにしましょう。

  • Webレコーダーによる自動記録
  • Webサイト上のテキストデータ取得
  • 変数名の変更
  • 変数の操作
  • 「For each」を使った繰り返し処理
  • Excelの読み込み
  • Excelへの書き込み