郵便番号を一括付与する3つの方法(Excel/CSVバッチ/無料Web)

目次

先に結論(最短3手)

  1. 公式データをDL:日本郵便の「住所の郵便番号(1レコード1行/UTF-8)」か従来のKEN_ALLを入手。毎月末に更新されます。郵便局 | 日本郵便株式会社+2郵便局 | 日本郵便株式会社+2
  2. 住所を正規化:そのまま突っ込むと一致率が落ちるので、最低限「都道府県+市区町村+町域」の形に整える(下記レシピ)。
  3. 突合して付与:ExcelのPower Query(あいまい統合)/CSVバッチ(Python)/無料Web(Googleスプレッドシート)のいずれかでキー一致→郵便番号列をJOINMicrosoft Learn

方法①:Excel(Power Query)で“高い再現性”の一括付与

Excel 365想定。数千〜数万行でも安定/GUI完結。

手順(コピペ手順)

  1. 日本郵便データをDL & 解凍
    • ダウンロードページから「住所の郵便番号(1レコード1行)」を推奨(UTF-8)。従来のKEN_ALL.ZIPはShift_JIS・複数行分割の注意あり。郵便局 | 日本郵便株式会社+1
  2. 参照テーブルを作る
    • Excel → データ → テキスト/CSVから → 先のCSVを読み込み。
    • 列を確認して**[都道府県(漢字)] [市区町村(漢字)] [町域(漢字)] [郵便番号]**の4列を残す。
    • カスタム列で結合キーを作成:
      = [都道府県] & [市区町村] & [町域](列名は実際の見出しに合わせてOK)
  3. あなたの住所リストを取り込む
    • 同じくデータ → テーブルまたは範囲から。
    • 住所列から**“建物名・号室”を削除**し、都道府県・市区町村・町域の文字が残る形に(余力があればカスタム列でSUBSTITUTE等を使って「丁目・番地」をハイフン整形)。
    • ここでも結合キー列を作る:= [都道府県] & [市区町村] & [町域]
  4. 照合(Merge)
    • Power Query → クエリのマージ → 住所側キー列と参照側キー列を選択。
    • 一致種類:**あいまい一致(Fuzzy)**にチェック → 類似度しきい値 0.85 目安、最大一致 1Microsoft Learn
    • 展開で**[郵便番号]を追加 → 完了 → 右上閉じて読み込む**。
  5. 検証
    • 未一致行はフィルタで確認。町域の表記ゆらぎ(「ヶ/ケ」「大字」「通り名」)を直すとヒット率UP。

うまくいかない時:従来のKEN_ALLは複数レコード文字コードの注意点あり(Shift_JIS/0埋め喪失など)。読み込み時の文字コード設定と列のデータ型に注意。郵便局 | 日本郵便株式会社


方法②:CSVバッチ(Python)で“完全自動化”

繰り返し運用・大量データ向け。無料ライブラリのみ。

ざっくり流れ

  1. 日本郵便CSVをDL(毎月末更新)→ jp_zip.csv として解凍。郵便局 | 日本郵便株式会社+1
  2. 住所CSV(input.csv)の住所列を正規化(Geoloniaのオープンソースを使用)。GitHub
  3. 正規化で得た pref/city/town を結合キーにして jp_zip.csv内部結合zip列を付与。
  4. 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スプレッドシート)で“ゼロ円運用”

インストール不要・共同編集に強い。

手順

  1. 日本郵便CSVをGoogleドライブへアップロード→スプレッドシートに変換(ZIPは解凍してから)。列を都道府県/市区町村/町域/郵便番号に揃え、A列に**=H2&I2&J2のように結合キー**を作成。郵便局 | 日本郵便株式会社
  2. あなたの住所表にも pref/city/town 列を用意。手早く整えたい場合は、Geoloniaの住所正規化デモで貼り付け→結果をペーストしてOK。GitHub
  3. VLOOKUPで付与
    • あなた側シートに key = pref&city&town
    • 郵便番号列に: =INDEX(JPZIP!$C:$C, MATCH($A2, JPZIP!$A:$A, 0)) ※JPZIP!A:Aが結合キー、C列が郵便番号の例。
  4. A3掲示や配布用にCSV書き出し → 他ツールへ連携。

スプレッドシートの数式に自信がない場合でも、キー列を作る→INDEX/MATCHの2手だけで完了します。


精度を上げる5つのコツ(実務の“つまづき回避”)

  • 建物名・号室は別列に退避(JOINは町域まで)。
  • 「丁目・番地」のハイフン統一(例:1−2−31-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を差し替えるだけで、継続的に精度を保てます。郵便局 | 日本郵便株式会社

一次情報(公式)

最終更新日: 2025-08-24

参考文献

  • 郵便番号データDL(住所の郵便番号/事業所個別/PDF ほか)。郵便局 | 日本郵便株式会社
  • KEN_ALLの仕様・列構成・注意点(文字コードや分割レコード)。郵便局 | 日本郵便株式会社
  • 更新頻度(毎月末)。郵便局 | 日本郵便株式会社
  • Power Queryの“あいまい統合”(Fuzzy Merge公式ドキュメント)。Microsoft Learn
  • Geolonia 住所正規化(OSS)(住所→pref/city/townの整形に有用)。GitHub
佐藤航
佐藤航|ライター
生活インフラ支援

【佐藤航】(ライター)。
専門は
①地図サービスの業務活用(配送・不動産・営業)、
②高齢ドライバーの講習・手続きの実務支援。一次情報(省庁・自治体・メーカー等)を起点に、体験・実測・スクリーンショットで検証。記事は出典・最終更新日・更新履歴を必ず付与します。これまで100件以上、検証ログ20本を公開。X/noteでは作業メモや失敗例も含めて透明化しています。

この記事が気に入ったら
いいね または フォローしてね!

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