EXCEL VBA Google Chrome(グーグルクローム)の操作・乗換案内・交通費精算・定期代・webスクレイピング(テクニック)
EXCEL VBA Google Chrome(グーグルクローム)の操作・乗換案内・交通費精算・定期代・webスクレイピング(テクニック)
今回説明するのは、EXCEL VBAとGoogleChrome(クローム)を利用して、Yahoo乗換案内・ジョルダン乗換案内のWebサイトから運賃や定期代などを取得する方法を説明いたします。下記のサンプルプログラムは、社内業務で外出した時に交通費を精算する時や複数人の定期代を調べる時に利用すると便利だと思います。出発駅と到着駅をEXCELシートに登録していると順番にWebサイトから運賃や定期代を取得します。あくまでも、簡易的にプログラムを作成しておりますので、細かい設定等は、出来ませんのでご了承下さい。なお、Webスクレイビングを利用する際は、問い合わせ先のWebサーバーに負荷がかかりますので、連続利用はお控え下さい。それでは、サンプルプログラムを交えて順番に説明いたします。
●注意:下記の各プログラムを実行するには、SeleniumBasic事前設定が必要になります。下記を参照して下さい。
EXCEL VBA Google Chrome(グーグルクローム)の操作・webスクレイピング・情報取得(Seleniumの設定・準備)
●EXCEL VBA バス運賃・電車運賃の料金集計「サンプルプログラム」(テクニック)
EXCEL VBA Google Chrome(グーグルクローム)の操作・乗換案内・交通費精算① メッセージボックスに表示
下記のサンプルプログラムは、YahooJAPAN!路線情報(乗り換え案内)のWebサイトを利用して、プログラム内に指定した出発駅と到着駅の区間運賃を検索するサンプルプログラムです。今回のプログラムでは、出発駅「東京」⇒到着駅「新宿」としてプログラム実行を行い指定区間の運賃(電車料金)をメッセージボックスに表示します。
【プログラムの流れ】
① グーグルクロームでYahoo!JAPAN!路線案内のWebサイトを立ち上げます。
② 出発駅に「東京」・到着駅に「新宿」で検索して区間運賃が表示されます。
③ メッセージボックスに検索結果の運賃を表示します。
【プログラム実行条件】
① SeleniumBasic事前設定をサイト(https://akira55.com/seleniumbasic_googlechrome/)より行って下さい。
② VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
' '******** AKIRA55.COM ******* https://akira55.com/transportation_expenses/ ' 'VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。 ' Sub transportation_expenses01() 'Yahoo!JAPAN!路線情報(乗り換え案内) Dim Driver As New Selenium.WebDriver Dim Webtxt As String Driver.Start "chrome", "https://transit.yahoo.co.jp/" 'グーグルクロームでYahoo!JAPAN 路線情報(乗り換え案内)を立ち上げます。 Driver.Get "/" Driver.FindElementByName("from").SendKeys "東京" '出発に”東京”を入力します Driver.FindElementByName("to").SendKeys "新宿" '到着に”新宿”を入力します Driver.FindElementByCss("#searchModuleSubmit").Click '検索ボタンををクリック Webtxt = Driver.FindElementByCss("#rsltlst > li:nth-child(1) > dl > dd > ul > li.fare").Text '検索結果より、運賃を取得 MsgBox "電車料金は、" & Webtxt 'メッセージボックスに検索結果の Driver.Close Set Driver = Nothing End Sub ' |
(画面クリックして拡大)
EXCEL VBA Google Chrome(グーグルクローム)の操作・乗換案内・交通費精算②EXCELシートに表示
下記のサンプルプログラムは、YahooJAPAN!路線情報(乗り換え案内)のWebサイトを利用して、EXCELシート内に指定した出発駅と到着駅が登録されています。この出発駅と到着駅の区間運賃を連続にWebサイトより検索するサンプルプログラムです。検索結果は、EXCELシートに運賃として転記されます。
【プログラムの流れ】
① グーグルクロームでYahoo!JAPAN!路線案内のWebサイトを立ち上げます。
② エクセルシートのB列の最終行を取得します。(データ件数を取得)
③ エクセルシートのC列から出発駅・D列:到着駅をWebサイトへ転記します。
④ Webサイトに出発駅・到着駅が転記されたら、区間運賃を検索します。
⑤ 運賃結果をエクセルシートのE列に転記します。
⑥ データの最終行まで繰り返します。
【プログラム実行条件】
① SeleniumBasic事前設定をサイト(https://akira55.com/seleniumbasic_googlechrome/)より行って下さい。
② VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
' '******** AKIRA55.COM ******* https://akira55.com/transportation_expenses/ ' 'VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。 ' Sub transportation_expenses02() 'Yahoo!JAPAN!路線情報(乗り換え案内) Dim Driver As New Selenium.WebDriver Dim Webtxt As String Dim I, lRow As Long lRow = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得します。 With Driver .Start "chrome" For I = 2 To lRow 'B列に登録されている最終行まで繰り返します。 .Get "https://transit.yahoo.co.jp/" 'Yahoo!JAPANを開きます .FindElementByName("from").SendKeys Cells(I, "C") 'C列のセルから出発駅を入力します。 .FindElementByName("to").SendKeys Cells(I, "D") 'D列のセルから到着駅を入力します。 .FindElementByCss("#searchModuleSubmit").Click '検索をクリック .Wait 2000 'ページの表示待ち Webtxt = .FindElementByCss("#rsltlst > li:nth-child(1) > dl > dd > ul > li.fare").Text '検索結果より、運賃を取得します。 Cells(I, "E") = Webtxt '運賃の取得結果をE列に代入します。 Next I '全てのデータが終わるまで繰り返します。 .Close End With Set Driver = Nothing End Sub ' |
(画面クリックして拡大)
EXCEL VBA Google Chrome(グーグルクローム)の操作・乗換案内・定期券・定期代検索:1ヶ月・3ヶ月・6ヵ月 ③EXCELシートに表示
下記のサンプルプログラムは、ジョルダン乗換案内のWebサイトを利用して、EXCELシート内に一覧表示された出発駅と到着駅が登録されています。この出発駅と到着駅の乗車区間にあたる1ヶ月・3ヶ月・6ヶ月の定期代を連続に検索するサンプルプログラムです。検索結果は、EXCELシートに定期代として転記されます。
【プログラムの流れ】
① グーグルクロームでジョルダン乗換案内のWebサイトを立ち上げます。
② エクセルシートのB列の最終行を取得します。(データ件数を取得)
③ エクセルシートのC列から出発駅・D列:到着駅をWebサイトへ転記します。
④ Webサイトに出発駅・到着駅が転記されたら、定期代の検索を行います。
⑤ 結果をエクセルシートのE列~G列に定期代が転記します。
⑥ データの最終行まで繰り返します。
【プログラム実行条件】
① SeleniumBasic事前設定をサイト(https://akira55.com/seleniumbasic_googlechrome/)より行って下さい。
② VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
' '******** AKIRA55.COM ******* https://akira55.com/transportation_expenses/ ' 'VBEの参照設定を行う【VBEの画面より】【ツール】⇒【参照設定】を選択して【Selenium Type Library】にチェックを入れます。 ' Sub transportation_expenses03() 'ジョルダン乗換案内(定期代検索) Dim Driver As New Selenium.WebDriver Dim Webtxt As String Dim I, lRow As Long lRow = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得します。 With Driver .Start "chrome" For I = 3 To lRow 'B列の最終行まで、繰り返します。(登録件数分) .Get "https://www.jorudan.co.jp/norikae/teiki.html" 'Webページジョルダン定期代検索を開きます .FindElementByName("eki1").SendKeys Cells(I, "C") 'C列から出発駅をを入力します .FindElementByName("eki2").SendKeys Cells(I, "D") 'D列から到着駅を入力します .FindElementByName("S").Click '検索をクリック .Wait 2000 'ページの表示待ち Cells(I, "E") = .FindElementByCss("#bR1 > table > tbody > tr.sums > td:nth-child(2)").Text '1ヵ月の定期代 Cells(I, "F") = .FindElementByCss("#bR1 > table > tbody > tr.sums > td:nth-child(3)").Text '3ヵ月の定期代 Cells(I, "G") = .FindElementByCss("#bR1 > table > tbody > tr.sums > td:nth-child(4)").Text '6ヵ月の定期代 Next I .Close End With Set Driver = Nothing End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。