Excel VBA | Cells を使った「郵便番号から市区町村まで自動判定する」応用例

VBA
スポンサーリンク

郵便番号は 日本郵便の公式データベースに「郵便番号 → 市区町村」の対応表が存在します。
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を読み込む → 全国すべての郵便番号に対応可能
  • 都道府県+市区町村を同時判定 → 配送ラベルや顧客管理に最適
  • 不正データを別シートに出力 → データ監査に活用できる

💡 この仕組みを使えば「郵便番号から市区町村別に顧客数を集計」や「地域別マーケティング分析」が一気に効率化します。

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