GoogleマップとExcelを連携して2地点間の距離を計算する方法【VBAユーザー定義関数】
Excelは幅広い用途に活用できる強力なツールです。特にVBAを組み合わせれば、Excel内でほぼ思い通りの処理を実現できます。もちろん、地図サービスと連携して2地点間の距離を求めることも可能です。本記事では、Googleマップのデータを利用してExcel上で距離を計算する方法を、明快な手順と図解付きで解説します。
記事内で使用している無料のExcelワークブックをダウンロードできるので、ぜひご自身でも試してみてください。
ユーザー定義関数を使ってGoogleマップで距離を計算する
ここでは、Googleマップのデータを利用して、「マッカーサー・パーク」から「ジャージーシティ」までの距離を求める例を紹介します。
まず押さえておきたい重要なポイントがあります。Googleマップのデータを使ってExcelで距離を計算するには、APIキーが必要です。APIとはApplication Programming Interface(アプリケーションプログラミングインターフェース)の略で、Excelはこのキーを使ってGoogleマップと通信し、必要なデータを取得します。Bingマップのように無料のAPIキーを提供しているサービスもありますが、GoogleマップのAPIは基本的に有料です。仮に無料でAPIキーを入手できたとしても、正常に動作しない場合があるため、公式ページからAPIキーを取得・契約することをおすすめします。
ここでは説明用に無料のAPIキーを使用していますが、実際には完全には動作しません。あくまでサンプルとしてご理解ください。今回はVBAでCalculate_Distanceという名前のユーザー定義関数を作成し、距離を求めます。この関数は「出発地点」「目的地」「APIキー」という3つの引数を受け取ります。それでは具体的な手順を見ていきましょう。
手順:
- Alt + F11キーを押してVBE(VBAエディター)を開きます。
- メニューから「挿入 > 標準モジュール」を選択し、新しいモジュールを作成します。
- モジュールウィンドウに以下のコードを入力します。
Public Function Calculate_Distance(start As String, dest As String)
Dim first_Value As String, second_Value As String, last_Value As String
first_Value = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
second_Value = "&destinations="
last_Value = "&mode=car&language=pl&sensor=false&key=YOUR_KEY"
Set mitHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Url = first_Value & Replace(start, " ", "+") & second_Value & Replace(dest, " ", "+") & last_Value
mitHTTP.Open "GET", Url, False
mitHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
mitHTTP.Send ("")
If InStr(mitHTTP.ResponseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Set mit_reg = CreateObject("VBScript.RegExp"): mit_reg.Pattern = """value"".*?([0-9]+)": mit_reg.Global = False
Set mit_matches = mit_reg.Execute(mitHTTP.ResponseText)
tmp_Value = Replace(mit_matches(0).Submit_matches(0), ".", Application.International(xlListSeparator))
Calculate_Distance = CDbl(tmp_Value)
Exit Function
ErrorHandl:
Calculate_Distance = -1
End Function
- コードの入力が完了したら、そのままワークシートへ戻ります。
コードの解説:
- 最初に、パブリック関数プロシージャCalculate_Distanceを宣言しています。
- 続いて、ユーザー定義関数の構成要素となる変数first_Value、second_Value、last_Valueを宣言します。
- 各変数に値を設定し(どれも内容が分かりやすいものです)、ServerXMLHTTPオブジェクトをmitHTTPとして生成することで、GETメソッドを利用できるようにします(このオブジェクトはPOSTメソッドにも対応可能です)。
- Urlは先ほど設定したすべての値を連結した文字列で、mitHTTPオブジェクトのOpenメソッドによって使用されます。
- 値の割り当て以降は、ライブラリ関数が残りの計算処理を自動的に行います。
これで、作成した関数を使う準備が整いました。
- セルC8に以下の数式を入力します。
=Calculate_Distance(C4,C5,C6)
- 最後にEnterキーを押すと、距離が表示されます。結果はメートル単位で返される点に注意してください。
関連記事: Excelで2つの住所間の走行距離を計算する方法
Googleマップで距離を計算する際の注意点
- 有効なAPIキーが必須です。
- 上記のコードでは、結果がメートル単位で出力されます。
- ユーザー定義関数は地名を直接指定できるため、緯度経度などの座標は不要です。
- 入力する地名が、実際に存在する有効な場所であることを確認しましょう。
Googleマップで距離を計算するメリット・デメリット
メリット
- 大量の地点ペアを処理する場合に便利です。フィルハンドル機能で数式をコピーできるため、Googleマップ上で手作業を行うよりもはるかに効率的です。
- 処理速度が速く、短時間で結果を得られます。
- 座標を使用する必要がありません。
デメリット
- 座標(緯度経度)を直接指定した計算には対応していません。
- 地図や経路情報は表示されず、距離の数値のみが取得できます。
- 地名が部分的・曖昧に一致している場合は正しく動作しません。
まとめ
本記事で紹介した手順を実践すれば、ExcelとGoogleマップのAPIを連携させて、2地点間の距離を自動的に計算できるようになります。ご不明な点があれば、コメント欄でお気軽にお尋ねください。フィードバックも歓迎します。さらに多くのExcel活用テクニックについては、ExcelDemyをご覧ください。
関連記事
- Excelで2つのGPS座標間の距離を計算する方法
- Excelで方位角と距離から座標を計算する方法
- Excelでマハラノビス距離を計算する方法(ステップバイステップ解説)
- Excelで2つの住所間のマイル数を計算する方法(2つのアプローチ)
- Excelでマンハッタン距離を計算する方法(2つのやり方)
- Excelでレーベンシュタイン距離を計算する方法(4つの簡単な方法)
-
Excelのデータベース関数とは?12種類の使い方を実例付きでわかりやすく解説
この記事では、Excelのデータベース関数の使い方を詳しく解説します。Excelには12種類のデータベース関数が用意されており、それぞれの適用方法を一つずつ紹介していきます。まずは記事全体の概要を以下の画像でご確認ください。記事を最後まで読めば、すべての関数の使い方を習得できます。 練習用ワークブックは、下のダウンロードボタンから入手できます。 Excelのデータベース関数の基礎知識 Excelのデータベース関数を使うと、特定のデータベース(リスト)に対して合計、積、平均などの基本的な計算を簡単に実行できます。データベース関数は全部で12種類あり、DSUM、DAVERAGE、DCOUNT、D
-
Excelで線形計画法をグラフ化する方法|詳細ステップ解説
複数の変数を含む問題を線形計画法で解かなければならない場面は少なくありません。線形計画法にはいくつかの解き方がありますが、その中でも最も手軽なのが「グラフ化」による解法です。本記事では、Excelを使って線形計画法をグラフ化し、最適解を求めるための詳細な手順を解説します。 練習用ワークブックはこちらから無料でダウンロードできます。 線形計画法とは? 線形計画法(LP:Linear Programming)とは、複数の数学関数と制約条件をもとに状況を分析し、目的関数の最適点を見つけ出すための数学的手法です。ビジネスにおける投資の最適化や生産サイクルの改善、必要な製品の購買計画など、幅広い分野で活