こんにちわ、しょーいです(@showilog)
会社での業務を回す際に都度VBAを使って色々便利にしている私です。
そんな中でも、個人的にかなり便利!と思えるVBAがあるので、googleマップを使ったVBAをご紹介したいと思います。
具体的な内容でいうと「駅名リストをgoogleマップ上で検索して、移動時間を一覧で取得する」というものです。
ピンポイントな使い方は無いかもしれませんが、使い方しだいではかなり便利かもです。
実際仕事でもかなり重宝していて、ガンガン使っております。
ではどういう仕様かご説明します。
※注
今回のVBAはSeleniumで動かしております。
Seleniumがよくわからない!という方は「VBA Selenium」とググってもらえればわかると思います。
ブラウザ操作を格段に楽にする神アイテムです。
googleマップをVBAで操作する
基本ベースの考え方はこちらの記事にまとめてある内容と同じです。
リストを作って、出発駅と到着駅が含まれたハイパーリンクをブラウザで起動。
指定した場所の情報をエクセル上にコピーしてくる、だけです。
今回はSeleniumでいじるので、Googleマップのjavascriptも操作できるのです。これが一番でかい。
エクセル側の表はこちら
このまま作成すれば使えるようになります。
D2セルに下の数式をコピペで貼り付ければOK
=IF(A2<>0,HYPERLINK(“https://www.google.co.jp/maps/dir/”&A2&”/”&B2),””)
あとで管理しやすいように、テーブルにしておくのをおすすめしておきます。
A列には出発地点。B列には到着地点。C列には移動にかかる時間が入力されます。
数式のハイパーリンクに飛ぶとわかると思いますが、googleマップのURLに出発地と目的地を直接打ち込んでも、検索してくれるんです。
ただ、クリックした今の時間で検索するので「何時に出発」とかを検索したい場合は、もっと複雑なURLになります。上の写真ですと私が23時にクリックしたものです。夜の電車が出ていない時などは始発が出る時間までプラスでかかっていまいますのでご注意ください。
今回は単純に移動距離をまとめて調べるVBAなので、時間指定はできないです。
コードはこちら
Sub Gmap() On Error Resume Next Dim i Dim driver As New ChromeDriver Dim Keys Dim Lastrow Lastrow = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row driver.Start "chrome" Dim Pas1 Dim Pas2 Pas1 = "//*[@id='omnibox-directions']/div/div[2]/div/div/div[1]/div[3]/button/img" Pas2 = "//*[@id='section-directions-trip-0']/div[1]/div[2]/div[1]/div" For i = 2 To Lastrow Keys = Cells(i, 4).Value If Keys <> "" Then driver.Get Keys driver.FindElementByXPath(Pas1).Click driver.Wait 1000 Cells(i, 3) = driver.FindElementByXPath(Pas2).Text End If Next i driver.Close MsgBox "完了しました" End Sub
短いですね。Seleniumだとこれくらいコンパクトにできるから好きです。
しかもこれ、あまり深く考えないで作ったので列(7,14,19行)を直接指定してるんです。なので、もっときれいにすればさらに使いやすくなると思いますので、カスタマイズして利用してください。
今回のポイントは11列と12列。ここでXパスを使用してgoogleマップを操作します。
11列のPas1は電車アイコンのクリック。
12列のPas2は移動時間のテキストを指定しています。
残りは、出発駅と到着駅をFor i で回せば完了。
仕組み自体はかなりシンプルな内容です。
Pas1の指定を変更すれば、電車じゃなく車での移動時間を調べられます。
Pas2をいじれば料金等も引っ張ってこれますね。
実際にマクロを動かしてみた動画はこちら。
実際の使い道
うちの会社では「この駅から一番近い店はどこだ!」みたいなことをしょっちゅう調べるので、リスト検索しまくってます。
一般的な使い方とすれば
・引越し先候補と通勤駅(バイト先駅)の距離を調べる
・遊びに行く候補の駅を調べる
くらいでしょうか・・?かなりピンポイントですが。
カスタマイズすれば「交通費」も引っ張ってこれるので、いじれば便利になるかもですね。
web上で似たようなサービスを探していたのですが、全然なかったので自作しました。
けっこう便利です。よかったら使ってくださいね!