Excelマクロで、ブラウザ(IE。InternetExplorer)を操作することもできます。
交通費検索のしくみで解説してみました。
※カフェにて iPhone X
ExcelマクロでIEを操作する設定
ExcelマクロでIE(インターネットエクスプーラー)を操作するには、次のような設定をしておきましょう。
VBE(ExcelでAlt+F11)で、[ツール]→[参照設定]を選び、
次の2つにチェックを入れて、Enterキーを押します。
これで設定は終わりです。
まずは、次のプログラムを書きましょう。
IEを動かす設定です。
(IEは任意です)
〇〇.Visible = True
だと、実際にIEを表示します。
開発中は、表示させて動きを確認したほうがやりやすいです。
Dim IE As InternetExplorer Set IE = CreateObject("internetexplorer.application") IE.Visible = True IE.Navigate "transit.yahoo.co.jp"
IE.Navigate “transit.yahoo.co.jp”で開くサイトを指定します。
F5キーを押して実行して、IEが起動するか確認しましょう。
ExcelマクロでIE操作を表現するには
ExcelマクロでIEを操作するときに、問題となるのは、「どうやって伝えるか」です。
Excel内であれば、セル名やシート名で指定できます。
IE、ブラウザ内ではどうすればいいのでしょうか。
実は、ブラウザ内にも名前がついています。
目に見えませんが、IEでは、その部分を右クリックして[要素の検査]をすれば、中身が見れるのです。
この場合はyahoo!路線情報の[出発]のボックスを右クリックしてから選びましょう。
IEの下になにやら表示されます。
これがHTMLというプログラムです。
さらに、ボックスを指定したまま再度[要素の検査]を選びましょう。
該当部分のプログラムが出てきます。
このうち、id=”sfrom”に注目し、このsfrormをExcelマクロで指定するのdす。
Excelからの読込
Excelファイルはこうなっていますので、2行目の出発駅(セルB2)を、sfromに入れていきます。
Excelマクロでは、
〇=△
で、
〇に△を入れる
という意味です。
IEのsfromに、ExcelのセルB2を入れる
ので、
IE.Document.getElementById(“sfrom”).Value = Range(“b2”).Value
と入れます。
IE.Document.getElementById(“sfrom”).Valueは、「IEのIDがsfromの値」という意味です。
id=”sfrom”をgetElementById(分割すると、get Element By ID)でとってきます。
到着駅も同様に、
IE.Document.getElementById(“sto”).Value = Range(“c2”).Value
とします。
検索ボタンのクリック
次に検索ボタンをクリックしましょう。
こういった形式のものは、フォームと呼ばれています。
このフォームがどんな名前か、[要素の検査]で調べると、searchという名前がついていることがわかります。
検索ボタンは、submitです。
Excelマクロには、
IE.Document.forms(“search”).submit
と書きます。
Excelへの書込
Excelへは、E列に書き込んでいきます。
ひとまず、セルE2に書き込んでいきましょう。
こう書きます。
Range(“e2”).Value = Replace(IE.Document.getElementsByClassName(“fare”)(0).innerText, “円”, “”)
195円という交通費は、fareという名前がついています。
ただ、これは、IDではなく、classというものです。
IE.Document.getElementsByClassNameとします。
さらに、この場合、3つともとってきてしまうので(そういうものだと思っていただければ)、そのうちの1番上という意味で、
IE.Document.getElementsByClassName(“fare”)(0)
にしています。
プログラム上は、0、1、2、3・・・と数えるので、一番上は0なのです。
そして、このままだと、「195円」と、円がついてしまうので、replaceで、円を””(ブランク)に変えています。
以上をつなげたのがこのプログラムです。
Do While IE.Busy Or IE.ReadyState < 4
DoEvents
Loop
という部分を随時入れて、IEのページ読込を待っています。
そうしないと、プログラムが速すぎて、データを取り切れないことがあるからです。
(それでも不安定ですが)
Sub fare_search_IE0() 'IEの操作設定 Dim IE As InternetExplorer Set IE = CreateObject("internetexplorer.application") IE.Visible = True 'サイトを開く IE.Navigate "transit.yahoo.co.jp" 'IE読込待ち Do While IE.Busy Or IE.ReadyState < 4 DoEvents Loop 'Excelから出発駅入力 IE.Document.getElementById("sfrom").Value = Range("b2").Value 'Excelから到着駅入力 IE.Document.getElementById("sto").Value = Range("c2").Value '検索 IE.Document.forms("search").submit 'IE読込待ち Do While IE.Busy Or IE.ReadyState < 4 DoEvents Loop '検索結果をExcelへ書きこむ&「円」を消す Range("e2").Value = Replace(IE.Document.getElementsByClassName("fare")(0).innerText, "円", "") End Sub
さらには、
For i = 2 To Range(“a” & Rows.Count).End(xlUp).Row
(2行目からデータの最後まで繰り返す)
と
Next
ではさんで、セルの部分を2→iに変えると、シートにあるデータの数だけ、「読取→検索→書込)を繰り返します。
Sub fare_search_IE() 'IEの操作設定 Dim IE As InternetExplorer Set IE = CreateObject("internetexplorer.application") IE.Visible = True Dim i As Long For i = 2 To Range("a" & Rows.Count).End(xlUp).Row 'サイトを開く IE.Navigate "transit.yahoo.co.jp" 'IE読込待ち Do While IE.Busy Or IE.ReadyState < 4 DoEvents Loop 'Excelから出発駅入力 IE.Document.getElementById("sfrom").Value = Range("b" & i).Value 'Excelから到着駅入力 IE.Document.getElementById("sto").Value = Range("c" & i).Value '検索 IE.Document.forms("search").submit 'IE読込待ち Do While IE.Busy Or IE.ReadyState < 4 DoEvents Loop '検索結果をExcelへ書きこむ&「円」を消す Range("e" & i).Value = Replace(IE.Document.getElementsByClassName("fare")(0).innerText, "円", "") Next IE.Quit End Sub
RPAとの比較
「Excelでブラウザを操作する」
というと、RPAでもできます。
これらを比較すると、RPAのほうは、ブラウザの操作を記録して動かすことができるので、やはり敷居は低いといえるでしょう。
他のアプリも操作しやすいです。
プログラムを書く量も、RPAは少なくて済みます。
とはいえ、RPAもプログラミングの知識は必要なので(繰り返し、変数など)、RPAからプログラミングに慣れて、Excelマクロをやってみるのもいいでしょうね。
UiPath×Excel。Excelデータを読み取り、ブラウザで交通費検索。無料で使えるRPAツール。 | EX-IT
PythonでExcelからデータ読込→サイトで交通費検索→Excelへデータ書込 | EX-IT
サンプルはこちらです。
昨日は、Excel本の原稿を提出しつつ打ち合わせ。
11月に出せそうです。
その後、RPA入門セミナーを開催しました。
■昨日の1日1新
※詳細は→「1日1新」
Excel本 原稿渡し
どぶろくハイボール
■昨日の娘日記
体のパーツを指さしながら言うのが好きなようです。
おめめ、くち、はな、みみ、おしり、あしを覚えました。
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方