スプレッドシートで住所から緯度・経度を自動出力する方法|Google Maps API活用

前回の記事ではGoogle Maps APIを使用するためAPIキーの取得方法をご紹介しました。

この記事では、Google Maps APIを使用して、スプレッドシートで住所から緯度・経度を自動出力する方法をご紹介します。

手順に沿って進めれば、簡単に設定できるようになります。

APIキーの取得方法についてはこちらの記事をご参照ください。

目次

完成イメージ

A列に住所を入力してスクリプトを実行すると、B列C列に緯度と経度が自動で出力

手順

スプレッドシートの準備

  • A列に住所を入力
  • 1行目はヘッダー行として使用

シート名を「緯度経度」としてスクリプト実行時に参照します。

別のシート名を指定する場合は、スクリプトを調整する必要があります。

GASの実行

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
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" を出力します。
STEP
スクリプトを保存

スクリプトを書いたら、名前を付けて保存します。

(例:「緯度経度」)

STEP
スクリプトを実行

スクリプトを実行してA列の住所からを緯度経度を算出します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
緯度経度が出力

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導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次