Excel VBA | 郵便番号データベースと突合して精度を上げる方法

Excel VBA VBA
スポンサーリンク

住所分割の精度を上げるには、日本郵便が公開している「郵便番号データベース(KEN_ALL.CSV)」を突合して使うのが最も確実です。
これにより「表記ゆれ」や「町域の判定ミス」を防ぎ、正規表現だけでは難しいケースも正しく処理できます。


郵便番号データベースを使った精度向上の流れ

  1. 郵便番号データの入手
  2. Excelに取り込み
    • CSVをExcelにインポートし、別シートに「郵便番号」「都道府県」「市区町村」「町域」を格納
    • 例:シート名を ZipDB としておく
  3. VBAで突合処理
    • 入力された郵便番号をキーにして、VLOOKUPDictionary を使って住所を引き当てる

サンプルコード(郵便番号から住所を取得)

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で検索すると高速化できる
  • 住所正規化:郵便番号で都道府県・市区町村を確定 → 残りを番地・建物名として分割

👉 まとめると、正規表現での分割は補助的に使い、最終的には郵便番号データベースで突合するのが実務的に最も堅牢です。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました