Google Sheetsで住所をジオコーディングする方法:確実に使える4つの方法
Google Sheetsでジオコーディングする方法:CSV、=GEOCODE()関数、Apps Scriptバッチ処理、逆ジオコーディング。1日100行無料。
Google Sheetsに住所データがあり、緯度・経度の座標が必要な方は、まさに適切な場所に来ました。顧客の所在地をマッピングしたり、配送ルートを計画したり、店舗検索機能を構築する場合でも、Google Sheetsでのジオコーディングは、正しいやり方を誰も教えてくれない最も一般的なデータ作業の一つです。
問題は?Google Sheetsにはジオコーディング機能が組み込まれていないことです。=GEOCODE()のような関数は存在しません。しかし、4つの実用的な方法があり、コード不要の方法から完全自動のバッチ処理まで対応できます。
このガイドでは、Google Sheetsで住所をジオコーディングする各アプローチを紹介します。シンプルなコピー&ペーストのワークフローからカスタムApps Script関数まで。すべてのコード例は実際に動作し、CSV2GEOプラットフォームですぐに使えます。
それでは始めましょう。
Google Sheetsで住所をジオコーディングする必要があるのは誰か?
方法を詳しく説明する前に、一般的にジオコーディングが必要な方を紹介します:
マーケティングチーム
地域ターゲティングキャンペーンのための顧客所在地マッピング。
配送オペレーション
ルート計画のための配送先住所の座標変換。
不動産会社
インタラクティブな物件検索マップのための物件情報のジオコーディング。
研究者
アンケートや公的記録からの地理データ分析。
Eコマース
店舗検索機能の構築と配送エリアの計算。
医療
アクセス分析と施設計画のための患者所在地マッピング。
共通点は?スプレッドシートに住所があること。座標が必要なこと。そして1,000件の検索に500円も払いたくないこと。
方法1:コード不要 — CSVエクスポート、CSV2GEOにアップロード、貼り付け
最適な用途:コードを一切書かずに座標を取得したい方。
これはスプレッドシートをジオコーディングする最もシンプルなアプローチです。APIキー不要、スクリプト不要、技術的な設定不要。
ステップ1:Google SheetsをCSVにエクスポート
住所が入ったGoogle Sheetsを開きます。ファイル > ダウンロード > カンマ区切り値(.csv)を選択します。
住所データがきれいであることを確認してください。通り、市区町村、都道府県、郵便番号、国などの列、または最低限、完全な住所が1つの列に含まれている必要があります。
ステップ2:CSV2GEOにアップロード
CSV2GEOにアクセスし、CSVファイルをドロップゾーンにドラッグします。プラットフォームが自動的に列を検出します:
- 通り — 住所の列
- 市区町村 — 市町村名
- 都道府県 — 県名や地域名
- 郵便番号
- 国 — 国名またはISOコード
処理をクリックすると、CSV2GEOが200以上の国の4億6,100万以上の住所データベースを使って各行をジオコーディングします。
ステップ3:結果をダウンロード
処理後、ジオコーディングされたファイルをダウンロードします。元のすべての列に加えて、緯度、経度、フォーマット済み住所、精度スコアが含まれます。
ステップ4:Google Sheetsに貼り付け
ダウンロードしたCSVをGoogle Sheetsで開くか(ファイル > インポート)、緯度と経度の列を元のシートにコピーするだけです。
以上です。コード不要、APIキー不要、設定不要。無料ジオコーディングでは1日100行が無料で利用できます。
方法2:カスタムApps Script関数 — =GEOCODE(A2)
最適な用途:シート内で数式のような体験を求めるユーザー。
この方法はGoogle Apps ScriptとCSV2GEOジオコーディングAPIを使って、カスタム=GEOCODE()関数を作成します。
ステップ1:APIキーを取得
CSV2GEO APIキーにアクセスし、無料キーを生成します。無料プランには1日1,000 APIリクエストが含まれます。
ステップ2:Apps Scriptエディタを開く
Google Sheetsで、拡張機能 > Apps Scriptに移動します。
ステップ3:ジオコーディング関数を追加
既存のコードを削除し、以下を貼り付けます:
/**
* 住所をジオコーディングしてlat, lngを返す
* @param {string} address ジオコーディングする住所
* @param {string} country ISOの国コード(任意、例:"JP")
* @return {string} "latitude, longitude"
* @customfunction
*/
function GEOCODE(address, country) {
if (!address) return "";
const API_KEY = "APIキーをここに入力";
const url = "https://api.csv2geo.com/v1/geocode"
+ "?q=" + encodeURIComponent(address)
+ (country ? "&country=" + country : "")
+ "&api_key=" + API_KEY;
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) {
const loc = data.results[0].location;
return loc.lat + ", " + loc.lng;
}
return "見つかりません";
}ステップ4:シートで使用する
スクリプトを保存(Ctrl+S)し、シートに戻ります:
=GEOCODE("東京都千代田区丸の内1-1", "JP")結果:35.6812, 139.7671
セル参照も使用できます:
=GEOCODE(A2, B2)A列に住所、B列に国コードが入っている場合です。
重要な注意:カスタム関数は1つずつ実行されます。500行の場合、それぞれが個別のAPIコールを行います。大量データには方法3を使用してください。
方法3:Apps Scriptメニューによるバッチジオコーディング
最適な用途:数百から数千の住所を効率的に処理する場合。
この方法はシートに「ジオコーディング」メニューを追加し、列全体をワンクリックでジオコーディングします。
ステップ1:スクリプトを追加
拡張機能 > Apps Scriptを開き、以下を貼り付けます:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('ジオコーディング')
.addItem('すべての住所をジオコーディング', 'geocodeAll')
.addItem('逆ジオコーディング(選択範囲)', 'reverseGeocodeSelected')
.addToUi();
}
function geocodeAll() {
const API_KEY = "APIキーをここに入力";
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
for (let row = 2; row <= lastRow; row++) {
if (sheet.getRange(row, 6).getValue()) continue;
const address = sheet.getRange(row, 1).getValue();
const country = sheet.getRange(row, 5).getValue();
if (!address) continue;
const url = "https://api.csv2geo.com/v1/geocode"
+ "?q=" + encodeURIComponent(address)
+ (country ? "&country=" + country : "")
+ "&api_key=" + API_KEY;
try {
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) {
const r = data.results[0];
sheet.getRange(row, 6).setValue(r.location.lat);
sheet.getRange(row, 7).setValue(r.location.lng);
sheet.getRange(row, 8).setValue(r.accuracy_score);
}
} catch (e) {
sheet.getRange(row, 6).setValue("エラー: " + e.message);
}
Utilities.sleep(200);
if (row % 50 === 0) {
SpreadsheetApp.getActiveSpreadsheet().toast(
"処理済み " + row + " / " + lastRow, "ジオコーディング", 3);
}
}
SpreadsheetApp.getActiveSpreadsheet().toast("完了!", "ジオコーディング");
}ステップ2:シートを整理する
| A(住所) | B(市区町村) | C(都道府県) | D(郵便番号) | E(国) | F(緯度) | G(経度) | H(信頼度) |
|---|---|---|---|---|---|---|---|
| 東京都千代田区丸の内1-1 | 千代田区 | 東京都 | 100-0005 | JP | 自動 | 自動 | 自動 |
ステップ3:ジオコーダーを実行
シートをリロードします。「ジオコーディング」メニューが表示されます。ジオコーディング > すべての住所をジオコーディングをクリックします。
スクリプトは200msの間隔で行を処理します。500件の住所で約2分かかります。
ヒント:1,000件以上の住所の場合は、数日に分散するか、CSVにエクスポートしてバッチジオコーディングを使用してください。
方法4:Google Sheetsでの逆ジオコーディング
最適な用途:すでに緯度・経度があり、住所が必要な場合。
これは正方向のジオコーディングの逆です。GPS座標があり、対応する住所が必要な場合。これが逆ジオコーディングです。
逆ジオコーディング関数
function REVERSE_GEOCODE(lat, lng) {
if (!lat || !lng) return "";
const API_KEY = "APIキーをここに入力";
const url = "https://api.csv2geo.com/v1/reverse"
+ "?lat=" + lat + "&lng=" + lng + "&api_key=" + API_KEY;
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) return data.results[0].formatted_address;
return "見つかりません";
}使い方:
=REVERSE_GEOCODE(35.6812, 139.7671)結果:東京都千代田区丸の内1-1, 100-0005, JP
APIレスポンスの理解
CSV2GEO APIを呼び出すと、以下のようなレスポンスが返ります:
{
"results": [{
"formatted_address": "東京都千代田区丸の内1-1, 100-0005, JP",
"location": { "lat": 35.6812, "lng": 139.7671 },
"accuracy": "rooftop",
"accuracy_score": 0.98,
"components": {
"house_number": "1-1",
"street": "丸の内",
"city": "千代田区",
"state": "東京都",
"postcode": "100-0005",
"country": "JP"
}
}]
}accuracy_scoreフィールドが重要です。0.95以上 = 建物レベルの精度。0.7〜0.95 = 通りレベル。0.7未満 = 市区町村または郵便番号レベルのみ。
比較:どの方法を選ぶべきか?
| 方法 | 難易度 | 速度 | 最適な用途 | 無料プラン |
|---|---|---|---|---|
| 1. CSV + CSV2GEO | なし | ⭐⭐⭐⭐⭐ | 単発の作業 | 100行/日 |
| 2. =GEOCODE() | 基本 | ⭐⭐ | 10〜50行 | 1,000リクエスト/日 |
| 3. バッチメニュー | 基本 | ⭐⭐⭐⭐ | 100〜5,000行 | 1,000リクエスト/日 |
| 4. 逆ジオコーディング | 基本 | ⭐⭐⭐ | 座標 → 住所 | 1,000リクエスト/日 |
おすすめ:方法1は単発の作業に。方法3は定期的な使用に。10,000行を超える場合は、バッチジオコーディングを直接使用してください。
ヒントとベストプラクティス
1. 住所をクリーンにする
入力がゴミなら出力もゴミ。ジオコーディング前に:
- 空白を削除:=TRIM(A2)
- 略語を統一:「丁目」vs「-」、「番地」vs「-」
- 国コードを含める:JP、US、DEなどで精度が向上
- 住所を結合:=A2 & ", " & B2 & ", " & C2 & " " & D2
2. 必ず国を含める
精度を最も改善するのは国を指定することです。「丸の内1-1」は世界中の複数の場所に存在し得ます。「JP」を追加すれば即座に曖昧さが解消されます。
3. 大量データにはバッチ処理
=GEOCODE()は10〜50行に適しています。それ以上はバッチメニュー(方法3)を使うか、CSVにエクスポートしてCSV2GEOのバッチジオコーディングを使用してください。ファイルインポートは大量データに対して10倍高速です。
4. キャッシュを活用する
同じ住所を2回ジオコーディングするのは無駄です。座標が既に存在するか確認しましょう:
if (sheet.getRange(row, 6).getValue()) continue;5. エラーを処理する
一部の住所はジオコーディングできません — タイプミス、不完全なデータ。スクリプトは「見つかりません」または「エラー」を返すので、それらを特定できます。
6. API使用量を監視する
無料プランでは1日1,000リクエストを提供しています。5,000行の場合は5日に分散するか、上位プランにアップグレードしてください。
7. 自動化にはAPIを活用
定期的なジオコーディングには、フル機能のジオコーディングAPIで自動ワークフローを構築してください。CSV2GEOは正方向ジオコーディング、逆ジオコーディング、バッチ処理、場所検索、行政境界を網羅する19のエンドポイントを提供しています。
よくある質問
Google Sheetsでのジオコーディングは無料ですか?
はい。コード不要のCSV方法では1日100行が無料。API方法では1日1,000リクエストが利用可能です。
何件の住所をジオコーディングできますか?
無料で1日1,000件。50,000件以上の場合はCSVにエクスポートしてバッチジオコーディングを使用してください。
APIキーは必要ですか?
方法2、3、4のみ必要です。方法1は何も不要 — CSV2GEOにアップロードするだけです。
海外の住所にも対応していますか?
はい。CSV2GEOは200以上の国で4億6,100万以上の住所をカバーしています。ISOコード(JP、DE、FR)を含めてください。オーストラリアやブラジルのガイドもご覧ください。
精度はどのくらいですか?
きちんとフォーマットされた住所の場合、結果の90%以上が建物レベルの精度です。accuracy_score(0〜1)が信頼度を示します。詳しくは住所を緯度・経度に変換する方法ガイドをご覧ください。
逆ジオコーディングは可能ですか?
はい。上記の方法4をご覧ください。コード不要の逆ジオコーディングツールもご利用いただけます。
データは自動的に更新されますか?
いいえ。座標は静的な値です。住所を変更した場合は、関数またはスクリプトを再実行してください。
Google SheetsとExcelの違いは?
Google SheetsはApps Script(JavaScript)を使い、ExcelはVBAを使います。基本的なロジックは同じです。Google Sheetsはクラウドネイティブです。Excelは非常に大きなファイル(100万行以上)に適しています。専用ガイド:Excelでジオコーディング。
ジオコーディングを始めましょう
住所を無料バッチジオコーディングツールにアップロードするか、上記のスクリプトをGoogle Sheetsで使用してください。1日100行無料、登録不要です。
I.A. / CSV2GEO Creator
関連記事
Use our batch geocoding tool to convert thousands of addresses to coordinates in minutes. Start with 100 free addresses.
Try Batch Geocoding Free →