スプレッドシートで住所から緯度・経度を自動出力する方法|Google Maps API活用
前回の記事ではGoogle Maps APIを使用するためAPIキーの取得方法をご紹介しました。
この記事では、Google Maps APIを使用して、スプレッドシートで住所から緯度・経度を自動出力する方法をご紹介します。
手順に沿って進めれば、簡単に設定できるようになります。
APIキーの取得方法についてはこちらの記事をご参照ください。
完成イメージ
A列に住所を入力してスクリプトを実行すると、B列とC列に緯度と経度が自動で出力
手順
スプレッドシートの準備
- A列に住所を入力
- 1行目はヘッダー行として使用
シート名を「緯度経度」としてスクリプト実行時に参照します。
別のシート名を指定する場合は、スクリプトを調整する必要があります。
GASの実行
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function getLatLng() {
// 固定のシート名を指定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('緯度経度');
// A列の住所を取得(2行目から最終行まで)
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1);
const addresses = range.getValues();
// APIキーをスクリプトプロパティから取得
const apiKey = PropertiesService.getScriptProperties().getProperty("Maps_API_KEY");
if (!apiKey) {
throw new Error("APIキーが設定されていません。スクリプトプロパティに 'API_KEY' を追加してください。");
}
// 各住所について緯度・経度を取得
for (let i = 0; i < addresses.length; i++) {
const address = addresses[i][0]; // 住所を取得
if (address) {
const response = UrlFetchApp.fetch(
`https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}`
);
const data = JSON.parse(response.getContentText());
if (data.status === "OK") {
const location = data.results[0].geometry.location;
sheet.getRange(i + 2, 2).setValue(location.lat); // 緯度をB列に記載
sheet.getRange(i + 2, 3).setValue(location.lng); // 経度をC列に記載
} else {
sheet.getRange(i + 2, 2).setValue("Error"); // エラーの場合
sheet.getRange(i + 2, 3).setValue("Error");
}
}
}
}
スクリプトの説明
- シートの取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('緯度経度');
- シート名を指定して、そのシートを取得します。
- シート名を変更する場合は
'緯度経度'
を実際のシート名(例:'住所リスト'
)に置き換えます。
- 住所の取得
-
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1); const addresses = range.getValues();
- シートのA列(住所が入力されている列)の2行目から最終行までの範囲を取得します。
- 範囲のデータを配列形式で取得します。
- 1行目はヘッダー行で、データは2行目以降に入力されていると仮定しています。
- APIキーの取得
-
const apiKey = PropertiesService.getScriptProperties().getProperty("Maps_API_KEY"); if (!apiKey) { throw new Error("APIキーが設定されていません。スクリプトプロパティに 'Maps_API_KEY' を追加してください。"); }
- スクリプトプロパティから
Maps_API_KEY
という名前のAPIキーを取得します。 - APIキーが設定されていない場合、エラーとなります。
- APIキーは事前にスクリプトプロパティに登録しておく必要があります。
- スクリプトプロパティから
- 住所ごとのジオコーディング処理(緯度経度の地理座標に変換)
-
for (let i = 0; i < addresses.length; i++) { const address = addresses[i][0]; if (address) { const response = UrlFetchApp.fetch( `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}` ); const data = JSON.parse(response.getContentText());
- 各住所についてGoogle Maps APIのジオコーディングリクエストを送信します。
- 住所を
encodeURIComponent
関数でエンコードして、URL内に安全に組み込みます。 - APIのレスポンスをJSON形式で解析します。
- 結果の書き込み
-
if (data.status === "OK") { const location = data.results[0].geometry.location; sheet.getRange(i + 2, 2).setValue(location.lat); sheet.getRange(i + 2, 3).setValue(location.lng); } else { sheet.getRange(i + 2, 2).setValue("Error"); sheet.getRange(i + 2, 3).setValue("Error"); }
- レスポンスが正常(
status: "OK"
)の場合、緯度と経度をそれぞれB列とC列に書き込みます。 - エラーが発生した場合、B列とC列に
"Error"
を出力します。
- レスポンスが正常(
スクリプトを書いたら、名前を付けて保存します。
(例:「緯度経度」)
スクリプトを実行してA列の住所からを緯度経度を算出します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
B列に緯度、C列に経度が出力されます。
確認としてGoogleマップに緯度経度を入力すると、その地点が表示されます
(例:東京都港区芝公園4丁目2-8(東京タワー) 緯度:35.6585696 経度:139.745484)
注意事項
- 住所の正確性:
-
入力された住所が曖昧または不正確な場合、正しい結果が得られない可能性があります。
- 無料利用枠:
-
Google Maps APIには、毎月200ドル分の無料利用枠があり、通常の使用量では無料で利用できます。
応用編 – カスタム関数の作成
緯度を取得:=INDEX(GEOCODE(A2), 1)
経度を取得:=INDEX(GEOCODE(A2), 2)
Google Apps Scriptを使うことで、スプレッドシート内で直接カスタム関数として利用することも可能です。
以下のコードをスクリプトエディタに追加します。
function GEOCODE(address) {
if (!address) return ["", ""];
const apiKey = PropertiesService.getScriptProperties().getProperty("API_KEY");
const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}`;
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
if (data.status === "OK") {
const location = data.results[0].geometry.location;
return [location.lat, location.lng];
}
return ["Error", "Error"];
}
上部メニューの「▶ 実行」ボタンをクリックして、一度スクリプトを実行します。
その後、先ほどと同様の手順で権限確認を承認します。
カスタム関数の使用方法
セルに以下の数式を入力します。
緯度を取得(B列)
=INDEX(GEOCODE(A2), 1)
経度を取得(C列)
=INDEX(GEOCODE(A2), 2)
まとめ
GASを使うことで、スプレッドシートで簡単に住所から緯度・経度を取得することができます。
住所データの一括処理や位置情報の自動化を行う際にぜひご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント