#サンプルファイルについて 2021/7/24 追記
Github に、本ページで扱う Excel ファイルやサンプルのフローをアップロードしました。
よろしければご使用ください。
以下のイベント用にで作成したファイルになります。
#はじめに
Microsoft Igniteの発表でPower Automateの「per user with attended RPA plan」で「Power Automate Desktop」が使用できるようになりました。2020年9月24日でPreview版です。
この記事でPower Automate DesktopのWebレコーダーによる自動化やExcel操作を通じて、変数の扱いや画面機能ついて説明します。
また、2020年9月24日時点の既知の不具合情報についても途中記載しています。
トライアル開始手順もまとめてみましたので併せてご覧ください。
【Power Automateの新しいRPA機能】Power Automate Desktopのトライアル開始手順
機能紹介記事も作成しました。併せて御覧ください。(2020年9月26日追記)
【Power Automateの新しいRPA機能】Power Automate Desktopで出来ること(全33機能の紹介))
#自動化処理の作成画面「Power Automate Desktop flow designer」
Power Automate Desktopの自動化処理はPower Automate Desktop flow designer(以下、flow designer)で作成します。
Power Automate Desktop flow designer
flow designerの起動方法は、Power Automate Desktop flow console(以下、 flow console)から起動します。
flow consoleはPower Automate DesktopインストールをすることでクライアントPC上から起動できます。
インストール時にデスクトップにショートカットが作られているはずです。
flow consoleの画面
#Yahoo!路線情報の行程料金検索を行ってみる
今回はRPAツールの処理の定番、Yahoo!路線情報を使用して行程料金検索の自動化を行ってみます。
処理の大まかな流れとしては、3点です。
1.Excel上の出発地・到着地情報の一覧をPower Automate Desktopが読み取り
2.読み取った出発地・到着地情報を元にPower Automate DesktopがYahoo!路線情報にて料金検索を実施する
3.検索した料金の結果をPower Automate DesktopがExcelに転記する
といったものです。がんばれPower Automate Desktop。
##1.Excel上の出発地・到着地情報の一覧をPower Automate Desktopが読み取り
用意したExcelはこんなレイアウトです。
Power Automate Desktopで路線情報にExcel上の出発地(A列)と到着地(B列)を入力して検索し、そこで得られる料金と入力結果をC列とD列に入力します。
最初の処理はExcelの起動を行います。
Excelファイルの起動は「Excelの起動」アクションを使用します。
flow designer上で、アクション一覧から「Excel」→「Excelの起動」を探してダブルクリックします。
「Excelの起動」のプロパティウィンドウが立ち上がるのでここではどのファイルを起動するのかを設定します。
「Excelの起動」プロパティという箇所がデフォルトでは「空のドキュメントを使用」という新規の空っぽのファイルを作る設定になっているので、今回は以下のように設定します。
プロパティ | 設定値 | 説明 |
---|---|---|
Excelの起動 | 次のドキュメントを開く | 次のドキュメントを開くという設定 |
Document Path | 開きたいExcelファイルのパス | 出発地到着地が入力されているファイルを指定 |
それ以外はデフォルト値としますが、重要な項目だと思っているので説明をします。
プロパティ | 設定値 | 説明 |
---|---|---|
インスタンスを表示する | チェック有り(デフォルト値) | Excelウィンドウを表示するか非表示にするかを選択します。 |
生成された変数 | %ExcelInstance%(デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
「インスタンスを表示する」は今回は動作しているところがわかりやすく見えるようにONにします。 | ||
「生成された変数」は大切なプロパティ値です。後のExcelアクションで使用する特定のExcelインスタンスを格納する変数となる名前を入力します。これにより、複数のExcelスプレッドシートのうち、どれにアクセスするかを指定できます。 | ||
要は2つ以上の複数のExcelを開いて操作する時に今操作しているのはどちらのExcelなのかを把握するための情報です。Power Automate Desktopでは、その単位をインスタンスと呼称します。インスタンスはExcel以外にもこの後のWeb操作にも出てくるのでとても重要です。 | ||
インスタンス名は自動設定されて変数として作成されます。今回は1つのExcelしか起動しないのでデフォルトのままとします。 |
アクションを設定すると自動的にフロー変数という変数項目に上記で設定した「%ExcelInstance%」変数が設定されます。
次の処理ですが、今回の処理のポイントとしてはExcelの一覧から出発地と到着地を取得しますが、一覧上には何行までデータが入っているかわかりません。今回は3行レコードですが、ここは通常動的に変わります。Excelを開いてデータが無くなるまでぐるぐるとループする方法もありますが、Power Automate DesktopではExcel上の最初の空の行・最初の空の列を取得してくれるアクションがあります。
それが「Excel ワークシートから最初の空の列や行を取得」です。最初に空白になる行または列を取得してくれます。
flow designer上で、アクション一覧から「Excel」→「Excel ワークシートから最初の空の列や行を取得」を探してダブルクリックします。
「Excel ワークシートから最初の空の列や行を取得」のプロパティウィンドウが開きます。
このままプロパティの設定を説明します。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel インスタンス | %ExcelInstance%(デフォルト値) | どのExcelを使用しているか特定するための名称です |
生成された変数 1 | %FirstFreeColumn%(デフォルト値) | 最初の完全に空の列の数値を格納する変数となる名前を入力します。 これは数字になります。 たとえば、列Fが最初の空の列である場合、「6」として格納されます。 |
生成された変数 2 | %FirstFreeRow%(デフォルト値) | 最初の完全に空の行の数値を格納する変数となる名前を入力します。 |
%FirstFreeRow%に空の行の値が入ってきます。今回のサンプルなら「5」です。
ここで重要な点として、すべてのプロパティ項目にデフォルト値が入っています。
Power Automate Desktopの良い機能だと個人的に思うところとして、プロパティ値の設定が不要なことが多いところです。
まず、Excel Instanceの項目ですが、「Launch Excel」アクションの時に作成した変数%ExcelInstance%が自動的に入っています。
また、最初の空白行と列の値を返す変数についても「こんな感じでどう?」というように変数が設定されています。
そのため、今回は変数名はこのままデフォルト値のまま使用します。
続いての処理はExcelの行数分のループを設定します。Webの操作は、操作はExcelの行数分ループをして処理を行いますので、ループ処理を追加します。
ループのアクションは「ループ」の「Loop」をダブルクリックします。
「Loop Action」のプロパティウィンドウが開きます。
プロパティ | 設定値 | 説明 |
---|---|---|
開始値 | 2 | ループの開始行を表す値です。 |
終了 | %FirstFreeRow-1% | ループの終了行を表す値です。 |
増分 | 1 (デフォルト値) | ループ時のカウンターを繰り上げる値です。 |
生成された変数 | %LoopIndex% (デフォルト値) | ループ時のカウンター値です。この変数の値は、反復のたびに増加します。 |
各項目の設定値の説明をします。 | ||
「開始値」を2としているのは2行目から処理を開始することを表しています。これは、1行目が列名項目になっているためその行を処理対象外とするために「2」を設定しています。 | ||
「終了」は2番目のアクションで取得したExcel一覧の最初の空の行値が入っている「%FirstFreeRow%」を設定していますが、よく見ていただくと「%FirstFreeRow-1%」となっています。これは、%FirstFreeRow%はあくまで最初の空の行となるため今回はループカウンターとして使用するには1行分多くなります。最終行はその1つ前の4行目のため調整のため、%FirstFreeRow%から1減算しています。 | ||
「増分」はループカウンターの増加値のためデフォルトのまま1を設定します。 | ||
「生成された変数」は、ループカウンターの変数名となります。ここも変える必要は無いのでそのままです。 |
設定するとflowは以下のようにLoopとEnd Loopが設定されます。
設定したLoop内でExcel行ごとの処理を記述していきます。
次の処理はExcelからの値の取得を設定します。
Excelからの値の取得は、「Excel ワークシートから読み取り」で行います。
「Excel」→「Excel ワークシートから読み取り」をダブルクリックします。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel インスタンス | %ExcelInstance% (デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
取得 | 単一セルの値 (デフォルト値) | 単一セルから値を取得する設定です。 |
先頭列 | 1 | 何列目のセルを取得するかを設定します。 |
先頭行 | %LoopIndex% | 何行目のセルを取得するかを設定します。 |
生成された変数 | %departure% | セルから取得した値を設定する変数名です。 |
今回はExcelの出発地列から値を取得したいので先頭列は1列目、先頭行は上で指定したループカウンター(2からはじまって1ずつ増加)を指定します。
1回目のループでは1列目の2行目を取得することになるため、「A2」のセル値を取得します。
取得した結果を「%departure%」という名前の変数に格納します。ここでは「新潟」という文字が「%departure%」変数に入ります。
続いて到着地の値を取得したいので、同様に「Excel ワークシートから読み取り」を追加します。
こちらの項目には以下の設定を行います。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel インスタンス | %ExcelInstance% (デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
取得 | 単一セルの値 (デフォルト値) | 単一セルから値を取得する設定です。 |
先頭列 | 2 | 何列目のセルを取得するかを設定します。 |
先頭行 | %LoopIndex% | 何行目のセルを取得するかを設定します。 |
生成された変数 | %arrival% | セルから取得した値を設定する変数名です。 |
出発地との違いは「先頭列」の値が2になっていることと値を格納する変数値を新たに「%arrival%」としているところです。
「先頭列」の値を2にしたことにより、1回目のループでは2列目の2行目を取得することになるため、「B2」のセル値を取得します。
取得した結果を「%arrival%」という名前の変数に格納します。ここでは「東京」という文字が「%arrival%」変数に入ります。
ここまででExcelから値を取得する部分が終わりです。
次にWebブラウザの操作に移ります。
##2.読み取った出発地・到着地情報を元にPower Automate DesktopがYahoo!路線情報にて料金検索を実施する
Webブラウザの操作の流れは以下の通りです。
1.路線情報の画面を起動する
2.路線情報の出発地項目に「%departure%」の値を入れる
3.路線情報の到着地項目に「%arrival%」の値を入れる
4.検索ボタンを押下する
5.検索結果画面に遷移したら乗換回数が少ない順の画面に切り替える
6.表示された料金を取得して変数に格納する
今回はこの操作をWebレコーディングで行います。
Webレコーディングについては事前に操作対象とするブラウザにアドインをインストールしておきます。
アドインのインストールはPower Automate Desktopのインストール時にあわせてインストールしてあるか、flow designerのツールメニューからインストールが可能です。
Webレコーディングする前に事前に操作対象とするWebブラウザを起動し、操作対象とするページを開いておきます。
事前準備ができたのでWebレコーディングを開始します。
Webレコーディングは画面上部のWebレコーダーボタンをクリックします。
クリックするとどのブラウザを操作するかをするか選べる画面が表示されます。
ここでは先程起動したEdgeを使用したいので「Edge」を選択し、詳細をクリックします。
プロパティ | 設定値 | 説明 |
---|---|---|
Web ブラウザーインスタンス | 記録の新しいインスタンスを開くか作成する (デフォルト値) | 新規でインスタンスを作成します |
ブラウザーインスタンス名 | browser | 新規で作成するインスタンス名です。 |
タブを選択 | Yahoo!の乗換案内 | 操作対象とするサイトページです。 |
次へを押して記録操作に入りますが、
##ここで不具合情報
日本語表示の場合、既定で設定されていてるブラウザーインスタンス名の「ブラウザ」という文字が「無効な値です」と表示されます。
こちらも既知の不具合として認識されているものです。日本語ではNG。英数字に変更する必要があります。
不具合情報ここまでで、ここからWebレコーダの操作に移ります。
ブラウザと一緒「Web レコーダー」というブラウザ操作の記録ウィンドウが表示されます。
こちらにWeb操作が記録されていきます。
記録を開始するには、Webレコーダーの記録の開始ボタンをクリックします。
そのため、ここでは以下の検索の操作を行っていきます。
1.出発に「新潟」、到着に「東京」と入力し、「検索」ボタンを押下します。
2.検索結果の画面が表示されたら「乗換回数順」に切り替えます。
3.1番上に表示されている金額を取得するために該当項目にカーソルをあわせます。そうすると項目が強調表示されるので右クリックを選択します。メニューが表示されるので、データ取得する「要素の値を取得」を選択し、取得する要素として「テキスト」を選択します。
以上でレコーディング作業は終わりです。最後に「Web Recoder」の「終了」ボタンをクリックします。
レコーディングが終了すると下記のように今行った操作がflow designerへ自動的にアクションとして設定されます。
ブラウザ起動からデータ入力、リンククリック、値の取得まで必要なアクションを自動的に設定してくれています。
各アクションの説明は今回は割愛しますが、重要と考えているポイントを記載します。
1.各アクションは「%browser%」インスタンスの範囲で処理されている。
2.Webブラウザの操作はすべて構造解析され、「UI 要素」という領域に保存される。
1については、Excel操作と同様にインスタンスが自動生成され、そのインスタンスを指定することでどのブラウザ・ページの操作なのかを指定しています。ブラウザの値を別のブラウザに転記するような操作な場合、「%Browser%」インスタンスの他に、「%Browser2%」インスタンスを用意することになります。
2については、Power Automate Desktopの特徴的な機能の1つでブラウザの構造解析を行った上でその構造を「UI 要素」に保存しています。
例えば、最後に料金を取得してきた項目は「li」という名前でコントロールとして登録されています。
この実態については、liコントロールをダブルクリックするとSelector Builderという画面が開き、以下のようなhtml要素にアクセスするコントロールだということが分かります。
このように構造解析した結果をコントロールとして保存されるので、同一コントロールを同じプロセスで複数回操作する時に再利用性の面で便利ですし、セレクター要素が変更された時にもコントロール側を直すだけで修正ができます。
処理の話に戻ります。
ブラウザの自動化処理を書くことができましたが、このまま実行すると毎回、「新潟→東京」間の料金検索を行う処理になります。
ここをExcelから取得した値で検索するために修正を加えます。
新潟の文字が入っている1つ目の「Webページ内のテキストフィールドに入力する」をクリックします。
プロパティウィンドウが起動しますので以下のように変更します。
テキストの%'新潟'%を
Excelの出発地の値が入っている「%departure%」に変更します。
続いて、東京の文字が入っている2つ目の「Webページ内のテキストフィールドに入力する」のテキストも「%Arrival%」に変更します。
以上の変更だけで動的に出発地到着値をWebブラウザに渡すことができます。
Webブラウザの操作として最後にブラウザを閉じる操作を追加しておきます。
コメント「Web レコーダーを使用して自動生成されたアクションの終了の下」にアクションを追加します。
コメントアクションをクリックします
アクション一覧から「Web オートメーション」の「Web ブラウザーを閉じる」をダブルクリックします。
プロパティ | 設定値 | 説明 |
---|---|---|
Web ブラウザー インスタンス | %browser% (デフォルト値) | どのWebブラウザを使用しているか特定するための名称です。 |
Web ブラウザー インスタンスに今回閉じたいインスタンスである%Browser%が自動的に入ってくれているため特に設定変更の必要がありません。
素晴らしい。
以上でWebブラウザの自動化操作は終わりです。
最後に取得した金額をExcelに転記する処理を追加します。
##3.検索した料金の結果をPower Automate DesktopがExcelに転記する
料金の取得については上のWebブラウザの自動化内で実施しています。
該当アクションを確認します。こちらを確認すると取得した値は「%AttributeValue%」という項目に変数されていることが分かります。
「%AttributeValue%」をExcelに書き込むにはExcelを操作する「Excel ワークシートに書き込み」を選択します。
Excel ワークシートに書き込みのプロパティ画面が起動します。
転記の設定は以上です。1アクションの追加だけで終わりました。簡単。
以上で、すべての処理が記載できました。完成版のflowはこのような形です。
Varaibles欄(変数欄)はこうなっています。いくつか変数が出来ていますが、こちらで名称を指定したのは%departure%と%Arrival%と%browser%だけですね。あとはすべて自動生成のものを使用しています。
こちらの処理実行すると、以下の結果が得られます。ちゃんと出発地・到着地ごとの料金が得られました。
#まとめ
記事中にも書いておりますが、Power Automate Desktopは自動的に変数が設定されるところ、また、新しいアクションを指定すると利用する変数の候補まで表示してくれます。初めて使う方にとって便利な機能だと思います。開発生産性が高いという点が大きなのメリットだと思います。
今回は、料金検索処理を通じてExcelとWebブラウザを使用した簡単な自動化方法を記載してみました。
そして、本記事はWinAutomationで同処理を行った時の記事を元に作成しています。
【MicrosoftのRPA機能】「WinAutomation」とは?【その2 行程料金検索の自動化をしてみよう(ExcelとWebブラウザ操作の自動化)】
上記の記事から説明文はほとんど修正をいれていません。
キャプチャの取り直しと日本語化による文言の変更とPreview版不具合情報の追記程度です。
これはWinAutomationユーザにとっては新たな学習コストがかからないという面でも大きなメリットがあると思いました。