検索
連載

ExcelにGoogle Maps APIで地図を埋め込み、住所検索、拡大/縮小、地図種類変更VBA/マクロ便利Tips(2/2 ページ)

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Geocoding APIとGoogle Static Maps APIを利用して、指定した住所の位置を検索表示したり、地図を拡大/縮小したり、地図の種類を変えたりする方法を紹介。

Share
Tweet
LINE
Hatena
前のページへ |       

「地図の表示」の処理

 次は「地図の表示」の処理を解説する(リスト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 「地図の表示」のコード

 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
リスト3 オプションボタンが選択されたときのコード

 各オプションボタンが選択されると、「実行」ボタンの使用を可能にし、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
リスト4 スピンボタンがクリックされたときのコード

 最初の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のコードを、アクティブシート上に配置した「フォームの表示」ボタンに関連付け実行すると、図5のように表示される。「フォームを表示」ボタンをクリックすると、「Google Mapsを表示する」フォームが起動する。


図5 フォームが起動した

 次に、地図のタイプをオプションボタンから選択する。「roadmap」を選択してみる。すると、「実行」ボタンの使用が可能になり、WebBrowser内には世界地図が表示される。次に、正確な住所を入力する。

 今回は「愛媛県松山市道後緑台」と入力して「実行」ボタンをクリックした。指定した位置にマーカーが立って表示される(図6)。


図6 指定した住所にマーカーが立った

 次にスピンボタンをクリックして拡大してみた(図7)。


図7 スピンボタンで拡大した

 次に地図のタイプを、オプションボタンから「terrain」を選択してみた。少し地図を縮小して図8のように表示させてみた。


図8 地図のタイプを「terrain」で表示した

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.

前のページへ |