こんにちは!!Apachanです。
今回はPower Automate Desktopを使って出発駅と到着駅から電車料金を調べるフローを作成します。
Excelファイルから情報を参照したり、調べた料金をExcelファイルに書き込む処理も実装するため実務のヒントとなれば幸いです!
目次
1.前提
– 作成するフロー
– 想定利用シーン
– 事前準備
– 身につくこと
2.Excelファイルから対象データの取得
– 参考情報
– Excelの起動
– 最初の空の列や行を取得
– ワークシートから読み取り
– For each
– デバッグ
3.Webサイトから対象データの取得
– 参考情報
– Webレコーダーの起動
– Webレコーダー生成アクションの調整
– デバッグ
– エラーの対処
– フロー実行確認
4.取得データのExcelファイルへの書き込み
– ワークシートに書き込み
– Excelを閉じる
– デバッグ
5.シナリオ改修
– 課題2点
– 課題① 毎回ブラウザが起動
– 課題② 空行の対応
– 実行結果
6.まとめ
![]() |
Microsoft Power Automate かんたん活用ガイド 自動化ツールの大本命! [ 日経パソコン ] 価格:2,200円 |
前提
作成するフロー
今回作成するフローは以下の通りとなります。
- Excelファイルから複数の出発/到着駅の入った調査対象データを取得
- 調査対象データの出発/到着駅から電車料金の確認
- 調べた電車料金のExcelファイルへの書き込み
想定利用シーン
今回の電車料金に限らず社内のWebシステムを使った様々な業務に流用できる可能性があります。
業務の違いはありますが、Webへの入力やWebから取得したデータの書き込みは汎用性が高い内容です。
事前準備
以下3点準備ください。
Yahoo! 路線情報
以下サイトを利用して電車料金を調べます。
Excelファイル
対象データを取得したり、調べた料金を書き込むために利用します。
中身は下図のようになっています。
D列に書き込むような想定となります。
Google Chromeアドオン
Webレコーダーが利用できるようにPower Automate Desktopのアドオンは事前にChromeにイントールしてください。
身につくこと
前半は過去ブログで扱った内容の復習がメインとなります。
詳細は触れませんので、深堀りしたい方は参考情報より過去ブログをご確認ください。
- Excelファイルからデータ取得方法(復習)
- セル範囲(表形式のデータ)の扱い方(復習)
- Webレコーダーを使って出発/到着駅から電車料金の調査(復習)
- エラー発生時の処理方法
- データの書き込み方法
- 繰り返し処理を想定したWeb操作の修正方法
Excelファイルから対象データの取得
参考情報
本セクションは以前扱った内容のため、深堀りしたい方は以下ブログ記事をご確認ください。
Excelの起動
参照するExcelの起動からスタートします。
「次のドキュメントを開く」を選択して、Excelファイルのパスを設定します。
最初の空の列や行を取得
有効なセル範囲を取得するために最初の空の列と行を取得します。
要するに最初の空の列と行の各々1つ前が有効なデータの入った列と行になります。
前工程のExcelInstanceから最初の空の列と行が生成されます。
ワークシートから読み取り
有効なセル範囲を取得する準備が整ったのでワークシートの読み取りを行います。
有効なセル範囲を取得するため下図のようにパラメーターを設定します。
⑤に関しては、本来1引かなければなりませんが、エラー処理の対応のため意図的に空白行を残します。
実務の中では⑤は以下の通りで問題ありません。
⑤ %FirstFreeRow – 1%
For each
取得したデータを行毎に取り出すためFor eachを利用します。
各行の値がCurrentItemに繰り返し渡されます。
デバッグ
各行の情報が正常に渡されるかメッセージの表示を使って確認します。
CurrentItemは行全体を表す変数なため、各セルの値を取り出すためには下図のように指定します。
以下ダイアログボックスが行数分表示されました!
役割が終わったらアクションを無効化をします。
削除しても問題ありませんが、再び利用する機会があるのであれば無効化の方がいいでしょう。
Webサイトから対象データの取得
参考情報
本セクションは以前扱った内容のため、深堀りしたい方は以下ブログ記事をご確認ください。
Webレコーダーの起動
Webレコーダーを起動して、操作内容を記録します。
Google Chromeを利用して操作内容を記録します。
事前にYahoo! 路線情報は準備しておきます。
「記録の開始」を押下します。
下図の順番で入力、クリックして操作内容を記録していきます。
何故か前画面の検索ボタン押下の操作アクションが二重記録されため1つだけ削除します。
「料金の安い順」を押下します。
ルート1で表示された金額にカーソルを合わせて右クリックして、要素の値を抽出、テキストと選択します。
ルート1の金額がinnertextに格納されました。
Webレコーダー生成アクションの調整
Webレコーダーで生成されたアクションが最下部にある場合は、For eachとEndの間に移動させます。
生成されたアクションを全て選択してドラッグ&ドロップ、一括で位置変更できます。
位置変更できたことを確認しつつ、出発駅と到着駅を固定値から変数へ変更します。
今回はExcelファイルから対象データを取得するため、変数に置き換えなければなりません。
前セクションのデバッグで出発駅と到着駅の取得は確認しているため以下の変数に変更します。
出発駅 CurrentItem[1]
到着駅 CurrentItem[2]
デバッグ
電車料金に該当するinnertextの値が正常に取得できているかどうか確認します。
パラメーターは以下のように設定します。
フロー実行します。
エラーの対処
どうやら普段見慣れない画面が出てきてエラーが発生しました。
今回は偶然このような画面が表示されましたが、実務で運用するためにはこういったエラーの対象が必要になります。
折角の機会なのでエラー対処法を考えます。
事前にエラーが発生した際に特定位置に移動するためのラベルを設定します。
エラー発生時にPower Automate Desktopへ戻るとエラー発生箇所に印がついています。
こちらをダブルクリックしてエラー発生時の処理を作ります。
「エラー発生時」を押下します。
今回はエラー発生時に処理をスキップすための設定を作ります。
For eachのような繰り返し処理の場合、Endの直前のラベルにスキップさせることはよくあります。
エラー発生時の処理を設定すると以下のようにアイコンが表示されます。
フロー実行確認
エラー発生時に処理対象行のスキップに成功しました。
また、エラー発生時以外は正常に電車料金を取得することができました。
実行結果を確認したら、メッセージボックスの表示アクションは無効化しておきます。
取得データの対象ファイルへの書き込み
ワークシートに書き込み
正しい電車料金が取得できていましたので、次はその金額をExcelファイルに書き込む処理を作ります。
「Excelワークシートに書き込み」アクションを利用します。
書き込むセル番地は下図のようにA列のNoを活用します。
Noに1加算することで行数の情報になります。
パラメーターは以下のように設定します。
No CurrentItem[0]
Excelを閉じる
Excelを保存して閉じる処理も追加します。
アクションの追加位置には気を付けてください。
Eor eachとEndの間に入れると全ての書き込み処理が終わる前にExcelが閉じてしまうためエラーが発生します。
「ドキュメントを保存」を選択します。
デバッグ
下図のようにエラー発生行以外は無事にExcelファイルへの書き込みが行われました。
しかし、意図的に残した最後の空白行が原因でフローが途中で止まりました。
シナリオ改修
課題2点
以下2点の対処を行います。
- ブラウザが繰り返し処理の分だけ生成…
- 最後の空白行のエラーの対処法…
課題① 毎回ブラウザが起動
毎回Google Chromeが起動しないように、For eachの中から外へ出します。
下図のように反映すればOKです。
また、繰り返し処理の最後にはYahoo! 路線情報の最初のページ移動します。
この処理を追加しなければ、2回目以降の繰り返し処理の開始が結果ページからとなりエラーになってしまいます。
以下のようにパラメーターは設定します。
課題② 空白行の対応
今回は最後に空白行を入れましたが、途中に入ることもあります。
下図のようにIfアクションを追加することで処理対象から除外します。
CurrentItem[1]、すなわち出発駅が空でない場合のみ処理するよう設定します。
Ifの中にWebレコーダーで記録したアクションを配置します。
実行結果
フロー実行はうまくいきました。
少し長いですが、実行結果を録画したものは以下のものとなります。
まとめ
Power Automate Desktopを利用すれば、いくつかのテクニックを組み合わせると実務でも利用できそうなフローが作成できます。
今回のケースでは、Excelファイルのデータ取得、Webレコーダーの起動、Excelファイルへの書き込みなどの使い方をしっかり押さえることが重要です。
一つひとつは難しくありませんので、粘り強く習得していくとフロー作成が楽しくなるようにも感じます。