目次
先に結論(最短3手)
- 公式データをDL:日本郵便の「住所の郵便番号(1レコード1行/UTF-8)」か従来のKEN_ALLを入手。毎月末に更新されます。郵便局 | 日本郵便株式会社+2郵便局 | 日本郵便株式会社+2
- 住所を正規化:そのまま突っ込むと一致率が落ちるので、最低限「都道府県+市区町村+町域」の形に整える(下記レシピ)。
- 突合して付与:ExcelのPower Query(あいまい統合)/CSVバッチ(Python)/無料Web(Googleスプレッドシート)のいずれかでキー一致→郵便番号列をJOIN。Microsoft Learn
方法①:Excel(Power Query)で“高い再現性”の一括付与
Excel 365想定。数千〜数万行でも安定/GUI完結。
手順(コピペ手順)
- 日本郵便データをDL & 解凍
- ダウンロードページから「住所の郵便番号(1レコード1行)」を推奨(UTF-8)。従来のKEN_ALL.ZIPはShift_JIS・複数行分割の注意あり。郵便局 | 日本郵便株式会社+1
- 参照テーブルを作る
- Excel → データ → テキスト/CSVから → 先のCSVを読み込み。
- 列を確認して**[都道府県(漢字)] [市区町村(漢字)] [町域(漢字)] [郵便番号]**の4列を残す。
- カスタム列で結合キーを作成:
= [都道府県] & [市区町村] & [町域]
(列名は実際の見出しに合わせてOK)
- あなたの住所リストを取り込む
- 同じくデータ → テーブルまたは範囲から。
- 住所列から**“建物名・号室”を削除**し、都道府県・市区町村・町域の文字が残る形に(余力があればカスタム列で
SUBSTITUTE
等を使って「丁目・番地」をハイフン整形)。 - ここでも結合キー列を作る:
= [都道府県] & [市区町村] & [町域]
- 照合(Merge)
- Power Query → クエリのマージ → 住所側キー列と参照側キー列を選択。
- 一致種類:**あいまい一致(Fuzzy)**にチェック → 類似度しきい値 0.85 目安、最大一致 1。Microsoft Learn
- 展開で**[郵便番号]を追加 → 完了 → 右上閉じて読み込む**。
- 検証
- 未一致行はフィルタで確認。町域の表記ゆらぎ(「ヶ/ケ」「大字」「通り名」)を直すとヒット率UP。
うまくいかない時:従来のKEN_ALLは複数レコードや文字コードの注意点あり(Shift_JIS/0埋め喪失など)。読み込み時の文字コード設定と列のデータ型に注意。郵便局 | 日本郵便株式会社
方法②:CSVバッチ(Python)で“完全自動化”
繰り返し運用・大量データ向け。無料ライブラリのみ。
ざっくり流れ
- 日本郵便CSVをDL(毎月末更新)→
jp_zip.csv
として解凍。郵便局 | 日本郵便株式会社+1 - 住所CSV(
input.csv
)の住所列を正規化(Geoloniaのオープンソースを使用)。GitHub - 正規化で得た pref/city/town を結合キーにして
jp_zip.csv
と内部結合、zip
列を付与。 output.csv
に保存。
サンプル(概念コード)
# pip install pandas normalize-japanese-addresses
import pandas as pd
from normalize_japanese_addresses import normalize
# 1) 住所CSVを読み込み
df = pd.read_csv("input.csv") # address列がある想定
# 2) 正規化 → pref/city/town列を追加
def norm(addr):
try:
r = normalize(addr)
return pd.Series([r['pref'], r['city'], r['town']])
except:
return pd.Series(['','',''])
df[['pref','city','town']] = df['address'].apply(norm)
# 3) 日本郵便CSVを読み込み(pref/city/town/zip の4列に整形済み想定)
jp = pd.read_csv("jp_zip.csv")
# 4) 結合キーでJOIN
df['key'] = df['pref'] + df['city'] + df['town']
jp['key'] = jp['pref'] + jp['city'] + jp['town']
out = df.merge(jp[['key','zip']], on='key', how='left')
out.to_csv("output.csv", index=False)
- 正規化ライブラリのREADME(出力フィールドやレベルの説明)はここ。GitHub
補足:大口事業所個別番号は別CSV(事業所の個別郵便番号)を追加でJOINすると精度が上がります。郵便局 | 日本郵便株式会社
方法③:無料Web(Googleスプレッドシート)で“ゼロ円運用”
インストール不要・共同編集に強い。
手順
- 日本郵便CSVをGoogleドライブへアップロード→スプレッドシートに変換(ZIPは解凍してから)。列を都道府県/市区町村/町域/郵便番号に揃え、A列に**
=H2&I2&J2
のように結合キー**を作成。郵便局 | 日本郵便株式会社 - あなたの住所表にも pref/city/town 列を用意。手早く整えたい場合は、Geoloniaの住所正規化デモで貼り付け→結果をペーストしてOK。GitHub
- VLOOKUPで付与
- あなた側シートに
key = pref&city&town
- 郵便番号列に:
=INDEX(JPZIP!$C:$C, MATCH($A2, JPZIP!$A:$A, 0))
※JPZIP!A:Aが結合キー、C列が郵便番号の例。
- あなた側シートに
- A3掲示や配布用にCSV書き出し → 他ツールへ連携。
スプレッドシートの数式に自信がない場合でも、キー列を作る→INDEX/MATCHの2手だけで完了します。
精度を上げる5つのコツ(実務の“つまづき回避”)
- 建物名・号室は別列に退避(JOINは町域まで)。
- 「丁目・番地」のハイフン統一(例:
1−2−3
→1-2-3
)。 - 表記ゆらぎ(ヶ/ケ、之/ノ、通り名 等)を正規化ライブラリで吸収。GitHub
- 差分更新に強く:日本郵便は毎月末更新。差分を流し込む運用に。郵便局 | 日本郵便株式会社
- 事業所個別番号は別CSVを追加JOIN。郵便局 | 日本郵便株式会社
よくある質問(FAQ)
Q. 住所→郵便番号の“APIだけ”で一括はできますか?
A. 公式のZipCloudは“郵便番号→住所”APIです(逆引きは提供していません)。一括付与はCSV×JOINが王道です。zipcloud.ibsnet.co.jp
Q. KEN_ALLと新しいUTF-8形式はどちらを使うべき?
A. これから作るなら**1レコード1行(UTF-8)**が扱いやすいです。従来KEN_ALLの仕様(文字コードや分割レコード)に注意。A Memorandum郵便局 | 日本郵便株式会社
まとめ
- 公式CSVを核に、「住所の正規化 → キー結合 → 郵便番号付与」が最短最安。
- ノーコード派はExcel Power Query(Fuzzy Merge)、自動化派はPython、ゼロ円・共有重視ならGoogleスプレッドシート。Microsoft Learn
- 毎月末の更新に合わせて参照CSVを差し替えるだけで、継続的に精度を保てます。郵便局 | 日本郵便株式会社
一次情報(公式)
- 郵便番号データDL(住所の郵便番号/事業所個別/PDF ほか)。郵便局 | 日本郵便株式会社
- KEN_ALLの仕様・列構成・注意点(文字コードや分割レコード)。郵便局 | 日本郵便株式会社
- 更新頻度(毎月末)。郵便局 | 日本郵便株式会社
- Power Queryの“あいまい統合”(Fuzzy Merge公式ドキュメント)。Microsoft Learn
- Geolonia 住所正規化(OSS)(住所→pref/city/townの整形に有用)。GitHub