郵便番号は 日本郵便の公式データベースに「郵便番号 → 市区町村」の対応表が存在します。
Excel VBAでは、この対応表を簡易的に辞書(Dictionary)に登録しておき、郵便番号から市区町村を自動判定することができます。
コード例(簡易版)
Sub PostalCodeToCity()
Dim i As Long, lastRow As Long
Dim code As String, prefix As String
' 郵便番号→市区町村の対応表(例として一部のみ)
Dim cityMap As Object
Set cityMap = CreateObject("Scripting.Dictionary")
' 実務では日本郵便の公式CSVを読み込むのがベスト
cityMap.Add "1000001", "千代田区"
cityMap.Add "1500002", "渋谷区"
cityMap.Add "2200012", "横浜市西区"
cityMap.Add "5300001", "大阪市北区"
cityMap.Add "8100003", "福岡市博多区"
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
code = Cells(i, 1).Value
' ハイフン削除・空白除去
code = Replace(code, "-", "")
code = Trim(code)
' 郵便番号が7桁なら判定
If Len(code) = 7 And IsNumeric(code) Then
If cityMap.Exists(code) Then
Cells(i, 2).Value = cityMap(code) ' B列に市区町村
Else
Cells(i, 2).Value = "不明"
End If
Else
Cells(i, 2).Value = "不正"
End If
Next i
End Sub
VB解説
- 郵便番号を7桁に正規化 → ハイフン削除、空白除去
- Dictionary(連想配列) → 郵便番号と市区町村の対応表を保持
cityMap.Exists(code)→ 辞書に登録されていれば市区町村を返す- 不明/不正データ → エラー処理で判定
実行イメージ
| A列(郵便番号) | B列(市区町村) |
|---|---|
| 100-0001 | 千代田区 |
| 1500002 | 渋谷区 |
| 2200012 | 横浜市西区 |
| 5300001 | 大阪市北区 |
| 8100003 | 福岡市博多区 |
| 9999999 | 不明 |
応用ポイント
- 日本郵便の公式CSVを読み込む → 全国すべての郵便番号に対応可能
- 都道府県+市区町村を同時判定 → 配送ラベルや顧客管理に最適
- 不正データを別シートに出力 → データ監査に活用できる
💡 この仕組みを使えば「郵便番号から市区町村別に顧客数を集計」や「地域別マーケティング分析」が一気に効率化します。


