住所分割の精度を上げるには、日本郵便が公開している「郵便番号データベース(KEN_ALL.CSV)」を突合して使うのが最も確実です。
これにより「表記ゆれ」や「町域の判定ミス」を防ぎ、正規表現だけでは難しいケースも正しく処理できます。
郵便番号データベースを使った精度向上の流れ
- 郵便番号データの入手
- 日本郵便公式サイトから「全国一括版 KEN_ALL.CSV」をダウンロード
- 日本郵便 郵便番号データダウンロードページ
- Excelに取り込み
- CSVをExcelにインポートし、別シートに「郵便番号」「都道府県」「市区町村」「町域」を格納
- 例:シート名を
ZipDBとしておく
- VBAで突合処理
- 入力された郵便番号をキーにして、
VLOOKUPやDictionaryを使って住所を引き当てる
- 入力された郵便番号をキーにして、
サンプルコード(郵便番号から住所を取得)
Sub ZipToAddress()
Dim zip As String
Dim result As Variant
Dim lastRow As Long, i As Long
' 入力データはA列に郵便番号、出力はB列以降
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
zip = Replace(Cells(i, 1).Value, "-", "") ' ハイフン除去
' 郵便番号をキーにVLOOKUPで検索
result = Application.VLookup(zip, Sheets("ZipDB").Range("A:D"), 2, False)
If Not IsError(result) Then
Cells(i, 2).Value = result ' 都道府県
Cells(i, 3).Value = Application.VLookup(zip, Sheets("ZipDB").Range("A:D"), 3, False) ' 市区町村
Cells(i, 4).Value = Application.VLookup(zip, Sheets("ZipDB").Range("A:D"), 4, False) ' 町域
Else
Cells(i, 2).Value = "未登録"
End If
Next i
End Sub
VB✅ この方法のメリット
- 正規表現より精度が高い:公式データベースに基づくため誤判定が少ない
- 表記ゆれ対応:「ヶ」「ケ」「大字」「字」なども正しく処理
- 最新データに更新可能:毎月更新されるCSVを入れ替えるだけで最新化
💡 応用
- API利用:Web API(例:zipcloud API)を使えば、常に最新の郵便番号データを参照可能【参考例: zipcloud API】
- マスタ連携:AccessやSQL ServerにKEN_ALLを格納し、VBAからSQLで検索すると高速化できる
- 住所正規化:郵便番号で都道府県・市区町村を確定 → 残りを番地・建物名として分割
👉 まとめると、正規表現での分割は補助的に使い、最終的には郵便番号データベースで突合するのが実務的に最も堅牢です。


