ExcelにGoogle Maps APIで地図を埋め込み、住所検索、拡大/縮小、地図種類変更:VBA/マクロ便利Tips(2/2 ページ)
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Geocoding APIとGoogle Static Maps APIを利用して、指定した住所の位置を検索表示したり、地図を拡大/縮小したり、地図の種類を変えたりする方法を紹介。
「地図の表示」の処理
次は「地図の表示」の処理を解説する(リスト2)。
Sub 地図の表示() myAddressCoodinatePosition = myLatitude & "," & myLongitude Dim googleUri As String Dim myGoogleMapsUri As String Dim googleXmldoc As MSXML2.XMLHTTP Set googleXmldoc = CreateObject("MSXML2.XMLHTTP") googleUri = "http://maps.google.com/maps/api/staticmap?size=600x600&zoom=" & no & "&sensor=false&markers=" & myAddressCoodinatePosition & "&maptype=" & myMapType WebBrowser1.Navigate googleUri End Sub
2行目でPrivate変数「myAddressCoodinatePosition」に、同じく、Private変数である「myLatitude」「myLongitude」の値を「,(カンマ)」で区切って格納しておく。
3行目で文字列型の「googleUri」、5行目でMSXML2.XMLHTT型の変数「googleXmldoc」を宣言する。
6行目のCreateObject関数で、「MSXML2.XMLHTTP」ActiveXオブジェクトへの参照を作成し、オブジェクト型変数「googleXmldoc」に代入する。
7行目で変数「googleUri」に下記リクエストURIを指定する。
googleUri="http://maps.google.com/maps/api/staticmap?size=600x600&zoom=" & no & "&sensor=false&markers=" & myAddressCoodinatePosition & "&maptype=" & myMapType
引数「size」には「600×600」と指定し、「zoom」にはPrivate変数「no」の値を指定する。「sensor」には、PCからの使用なので「false」を指定する。「markers」には、緯度と経度が「,(カンマ)」で区切られた値を格納しているPrivate変数「myAddressCoodinatePosition」の値を指定する。「Maptype」にはPrivate変数、「myMapType」の値を指定する。
各オプションボタンが選択されたときの処理
次は、各オプションボタンが選択されたときの処理だ(リスト3)。
Private Sub OptionButton1_Click() okButton.Enabled = True myMapType = OptionButton1.Caption 地図の表示 End Sub Private Sub OptionButton2_Click() okButton.Enabled = True myMapType = OptionButton2.Caption 地図の表示 End Sub Private Sub OptionButton3_Click() okButton.Enabled = True myMapType = OptionButton3.Caption 地図の表示 End Sub Private Sub OptionButton4_Click() okButton.Enabled = True myMapType = OptionButton4.Caption 地図の表示 End Sub
各オプションボタンが選択されると、「実行」ボタンの使用を可能にし、Private変数「myMapType」に、オプションボタンのプロパティ「Caption」の値を指定して、「地図の表示」プロシージャを実行する。
これによって、地図のタイプが、オプションボタンから選択された地図のタイプに変更される。
拡大/縮小用のスピンボタンがクリックされたときの処理
次は、スピンボタンがクリックされたときの処理だ。スピンボタンをクリックすることで、地図が拡大/縮小される(リスト4)。
Private Sub SpinButton1_SpinDown() If no <= 10 Then no = 10 Exit Sub Else no = no - 1 地図の表示 End If End Sub Private Sub SpinButton1_SpinUp() no = no + 1 地図の表示 End Sub
最初の1〜9行目は、スピンボタンの「ダウン(左向き三角)」がクリックされたときの処理だ。2行目でPrivate変数「no」の値が「10」以下か判定し、10以下の場合は変数「no」を「10」で初期化する。それ以外は、変数「no」の値を1ずつ減少させて「地図の表示」プロシージャを実行する。これで地図が縮小される。
次の11〜14行目は、スピンボタンの「アップ(右向き三角)」がクリックされたときの処理だ。Private変数「no」の値を1ずつ増加させ、「地図の表示」プロシージャを実行する。これで地図が拡大される。
フォームの表示時の処理
次にアクティブシート上にExcelメニューの[挿入]→[図形]と選択して「角丸四角形」を配置し、「フォームの表示」というテキストにしておく。
VBE(Visual Basic Editor)のメニューから[挿入]→[標準モジュール]と選択してModule1を追加する。Module1内にリスト5のコードを記述する。ShowメソッドでUserForm1を表示するだけの簡単なコードだ。
Option Explicit Sub フォームの表示() UserForm1.Show End Sub
実行結果
リスト5のコードを、アクティブシート上に配置した「フォームの表示」ボタンに関連付け実行すると、図5のように表示される。「フォームを表示」ボタンをクリックすると、「Google Mapsを表示する」フォームが起動する。
次に、地図のタイプをオプションボタンから選択する。「roadmap」を選択してみる。すると、「実行」ボタンの使用が可能になり、WebBrowser内には世界地図が表示される。次に、正確な住所を入力する。
今回は「愛媛県松山市道後緑台」と入力して「実行」ボタンをクリックした。指定した位置にマーカーが立って表示される(図6)。
次にスピンボタンをクリックして拡大してみた(図7)。
次に地図のタイプを、オプションボタンから「terrain」を選択してみた。少し地図を縮小して図8のように表示させてみた。
Bing Maps、Google Maps、必要性に応じて使い分けよう
今回は、Tips「ExcelにBing Mapsを挿入し、Google Places APIで取得した住所から店舗の分布地図を作成」同様、Excel VBAを使ってGoogle Mapsを表示させてみたが、いかがだっただろうか
Bing Mapsのように検索した施設を表示できなかったが、任意の住所を入力し、その位置にマーカーを立てることで拡大縮小表示は行える。これだけでも、Excelを使う人にとっては大変に便利だ。Bing Maps、Google Mapsと、必要性に応じて使い分ければ、実務にも大いに役に立つサンプルだと思う。ぜひ、カスタマイズして使ってほしい。
著者プロフィール
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
テストエビデンス取得自動化の秘技(前編):Selenium VBAを使って自動でブラウザーを操作してスクショをExcelに張り付けてみた
システム開発におけるソフトウェアテスト(結合テスト〜システムテスト)において重要視されるエビデンス(作業記録)。前後編の2回にわたって、エビデンスとしてスクリーンショットをキャプチャし、テスト仕様書や納品書に張り付けていく作業を自動化するためのVBA/マクロのテクニックを紹介する。前編はSelenium VBAのインストール方法と使い方、スクリーンショットを自動でExcelに張り付ける方法について。- Windows TIPS:[Esc]キーによるExcel VBAの実行中断を防止する
- Windows TIPSディレクトリ > プラットフォーム別 > Office > Excel