Power Automate Desktopが無料に
2021/3/3からMicrosoftのRPAツールであるPower Automate DesktopがWindows10ユーザーに無償提供されるようになりました。
これはお金をかけずにWindows10上でのあらゆる操作を自動化できる可能性を意味します。
胸が熱くなりますね。
早速ダウンロードして使ってみましたので、本記事でご紹介させていただきます。
株価の調査を自動化する
やはり、自動化したい操作の2トップはWebブラウザとExcelではないでしょうか。
この2つは定型業務でもよく使われますから、これらを自動化するコツをつかめれば非常に役立ちそうです。
そこで、今回は
「Excelにリスト化されている銘柄の株価をWebサイトで調べて、結果をExcelに記入する」
という一連の操作をPower Automate Desktopで自動化してみたいと思います。
Power Automate Desktopのインストール
下記の公式ページから、「無料でダウンロードする」をクリックしてインストーラをダウンロードしてください。
Power Automate Desktop公式
あとはインストーラの指示通りに進めていけばOKです。特に迷うところはありません。
Power Automate Desktopでフローを作成する
Power Automate Desktopの起動
1.Power Automate Desktopを初めて起動すると、サインイン画面が表示されます。
2.サインインに成功すると「国/地域の選択」画面になるので、お住いの国を選択して「開始する」をクリックします。
3.開始するとフローの管理画面になります。初めはフローは1つもないので、「新しいフロー」から作成していきます。
新しいフローの作成
「新しいフロー」をクリックすると、フローの作成画面が表示されます。
ここではフロー名を「株価調査」として作成します。
これがフローの初期画面です。左側の「アクション」から所望の操作を選んで、真ん中の余白部分にドラッグ&ドロップし、フローチャートのような形でグラフィカルにフローを作成していきます。
フローの作り方には大きく2つの方法があります。
- レコーダーを使い人間の行った操作を記録してフローのベースを作り、そこから微調整する
- 最初からアクションを1つずつ組み立てていく
今回はアクションとフローを基礎から理解していくため、2の方法でやってみましょう。
おおまかなフローのイメージ
実際に作業を始めて行く前に、フローの大枠を考えてみましょう。
今回は下記のようなフローになるはずです。
- Excel(株主優待人気銘柄.xlsx)を開く
- Excelのリストの1番目の銘柄コードを株価検索のWebサイトで検索する
- 検索結果から株価情報をExcelのリストにコピペする
- 2番目から10番目まで3,4を繰り返す
Excelを開く
「株主優待人気銘柄.xlsx」というExcelファイルを開き、銘柄コードの列を1行ずつ読み込んでいくという操作を自動化してみましょう。
左側のアクションから
Excel > Excelの起動
をドラッグ&ドロップします。
Excelの起動
は"次のドキュメントを開く"
と指定して、
ドキュメントパス
では、株価情報が記載されているExcelファイル(株主優待人気銘柄.xlsx)を選択します。
Excelからデータを読み込む
Excelを開いたら次はデータを読み込んでいきます。
1行ずつデータを繰り返し処理していきたいので、まず左側のアクションから
ループ > Loop
をドラッグ&ドロップします。
株主優待人気銘柄.xlsxは1行目が表のラベルで、株式のデータは2行目から11行目に記載されています。
なので、ループは
開始値
:2
終了
:11
増分
:1
とします。
この変数はLoopIndex
として格納されます。
次はLoopとEndの間に処理を追加していきます。
左側のアクションから
Excel > Excelワークシートから読み取り
をドラッグ&ドロップします。
Excelインスタンスはすでに自動で選択されていますね。
取得
では"単一セルの値"を選択します。
先頭列
と先頭行
には、読み取りたいセルの行番号と列番号を入力します。
今回はB列のLoopIndex行を読み取りたいので、
列については、A列→1、B列→2、C列→3、…と変換して数字で入力します。
つまり、先頭列
は"2" となりますね。
先頭行
にはLoopIndexという変数を指定したいので、入力欄の右端の**{X}**というマークを押して、変数の中からLoopIndexを選択します。
ここで、読み取った値は変数ExcelData
に格納されます。
動作確認
では、このあたりで本当に銘柄コードを一行ずつ読み取れるのか確認してみましょう。
左側のアクションから
メッセージ ボックス > メッセージを表示
をドラッグ&ドロップします。
メッセージボックス
のタイトルは"銘柄コード"として、
表示するメッセージ
にExcelData
という変数を指定します。
フローの上の方にある三角のマーク(「実行」ボタン)をクリックしてフローを動かしてみましょう。
きちんと動作しましたか?
表示が確認できたら、このメッセージを表示
のアクションはジャマなので無効化しておきましょう。
メッセージの表示
の上で右クリックをして"無効にする"を選択します。薄い灰色になったら無効化されています。
Webの操作を自動化する
Excelから銘柄コードを取得できたので、次はこの銘柄コードで株価を検索します。
つまり、Webブラウザの操作を自動化していきます。
というサイトで銘柄コードを入力して結果を読み取っていきましょう。
Webブラウザを起動する
Chromeの場合、Power Automate Desktop拡張機能が必要らしいので事前にインストールしておきます。
左側のアクションから
Webオートメーション > 新しいChromeを起動する
をドラッグ&ドロップします。
新しいChromeを起動する
の詳細設定画面では、
新しいインスタンスを起動する
を選択して、
初期URL
には先ほどのサイトのURL"https://minkabu.jp/stock"を入力します。
ウィンドウの状態
はとりあえずここでは"最大化"にしておきます。
Webブラウザに入力する
次にサイトの「銘柄名、銘柄コードから株価を調べる」というところにExcelから取得した銘柄コードを入力して検索してみたいと思います。
アクションから
Webオートメーション > Webフォーム入力 > Webページ内のテキストフィールドに入力する
をドラッグ&ドロップします。
Excelで銘柄コードを読み取ったあとに検索するので、「Excelワークシートから読み取り」の下にドラッグ&ドロップしましょう。
詳細画面では、どこのフィールドに入力するかをUI要素で選択します。
UI要素
の右端の下矢印のようなマークをクリックして、新しいUI要素の追加
を選びます。
すると、追跡セッションというウィンドウが立ち上がります。
ここでWebページの各要素にマウスを当てると赤い枠がホバーします。
Ctrlキーを押しながら該当の要素をクリックするとその要素を認識して追加される仕組みです。
ここでは目的の検索フィールドにマウスを合わせると<input:search>
というWeb PageのUI要素として認識されます。
Ctrlキーを押しながらクリックしてUI要素として追加します。
こんな感じでUI要素として追加されたらOKです。
ここで注意が必要というか、私がハマってしまった点です。
追跡セッションで目的の検索フィールドにマウスを合わせるとEdit
となってしまうことがあります。
こうなってしまうと、Web PageのUI要素ではなく、通常のアプリケーションのテキスト入力の要素として認識されてしまうようでうまくいきません。
Webブラウザ内の要素がうまく認識されるときとされないときがあり、どう対処すればいいのか正確には不明です。
ブラウザを立ち上げ直したり、他の要素を選択させたりしていると、Web PageのUI要素をうまく認識してくれるようになります。
原理はよくわかりません。
UI要素がうまく認識されたら、次にテキストフィールドに入力したい文字列をテキスト
に入力します。
ここではExcelから読み取った銘柄コード(ExcelDataという変数)を入力したいので、それを入力して保存します。
Webのボタンをクリックする
同じ要領で次は、キーワード検索の横にある「検索」ボタンを押して検索を行います。
アクションから「Webページのリンクをクリックします」を選択します。
アクションから
Webオートメーション > Webフォーム入力 > Webページのボタンを押します
をドラッグ&ドロップします。
UI要素
では、先ほどと同じく追跡セッションを起動させて、サイト上の「検索ボタン」を認識させてCtrlを押しながら選択します。
Webから情報を読み取る
さて、ここで検索ボタンを押して検索結果が表示されたとして、どこから情報を読み取るかを考えます。
- 株価
- 売りか買いか
- 目標株価
あたりから情報を抜き出すことにしましょう。
アクションから
Webオートメーション > Webデータ抽出 > Webページからデータを抽出する
をドラッグ&ドロップします。
「このダイアログが開いている間に、実際のWebブラウザーウィンドウをフォアグラウンドに表示すると、ライブWebヘルパーがアクティブ化されます。」
という一見よくわからないメッセージが書いてありますが、
要は今の状態でWebサイトを開くと、先ほどと同じような追跡セッション状態となっているわけです。
Webサイト上の要素にマウスカーソルを合わせると赤枠が表示されると思います。
ここで抽出したい要素にカーソルを合わせて右クリックします。
するとメニューが出てくるので要素の値を抽出 > テキスト
と選択します。
- 株価
- 売りか買いか
- 目標株価
をそれぞれ読み取りましょう。
Excelにデータを入力
Webサイトから読み取った値をExcelに書き込んでいきましょう。
アクションから
Excel > Excelワークシートに書き込み
をドラッグ&ドロップします。
書き込む値
には先ほどWebサイトから読み取った値が格納されているDataFromWebPageという変数を選択します。
この変数はデータテーブルという二次元配列の形式になっています。
今回のケースであれば、抽出した値は3つあるので1行3列の形になっています。
二次元配列で特定の値を取り出したいときには、
DataFromWebPage[行番号][列番号]
の形で指定します。ただし、行番号、列番号は0から始まることに注意してください。
DataFromWebPage[0][0]
をExcelのE列に書き込みたいので
列:5
行:LoopIndex
を選択します。
同様にして
DataFromWebPage[0][1]
をExcelのF列に書き込みたいので
列:6
行:LoopIndex
DataFromWebPage[0][2]
をExcelのG列に書き込みたいので
列:7
行:LoopIndex
とします。
ちなみにアクションはコピペできます。
Webページの操作
Excelに値を書き込んだら、Webページで元の検索画面に戻って、次の行に進みます。
アクションから
Webオートメーション > Webページに移動します
をドラッグ&ドロップします。
移動
:戻る
を入力して保存します。
あとはこれをLoopで繰り返すだけですね。
このフローを実行すると、ちゃんとExcelに株価が追記されています。
参考
私の書いた他の自動化シリーズはこちらです。ご興味があればどうぞ!
【自動化】PDF内の表をPythonで抜き出す
https://qiita.com/konitech913/items/4ef70e1f7753c824b40f
【自動化】PythonでOutlookの予定を抜き出す
https://qiita.com/konitech913/items/2ec831863ad84db23558
【自動化】Pythonでマウスとキーボードを操る
https://qiita.com/konitech913/items/301bb63c8a69c3fcb1bd
【自動化】PythonでWordの文書を読み取る
https://qiita.com/konitech913/items/c30236bdf47775535e2f
【自動化】Pythonコードをexeファイル化する
https://qiita.com/konitech913/items/6259f13e057bc25ebc23
【自動化】PythonでOutlookメールを送信する
https://qiita.com/konitech913/items/51867dbe24a2a4272bb6
【自動化】PythonでOutlookのメールを読み込む
https://qiita.com/konitech913/items/8a285522b0c118d5f905
【自動化】Pythonでメール(msgファイル)を読み込む
https://qiita.com/konitech913/items/fa0cf66aad27d16258c0
【自動化】Pythonでクリップボードを操作してExcelに表を貼り付ける
https://qiita.com/konitech913/items/83975332e395a387eace