Excel VBA | ADOで郵便番号から市区町村まで抽出する完全版の応用例

Excel VBA VBA
スポンサーリンク

日本郵便が公開している KEN_ALL.CSV(全国郵便番号簿)を使えば、郵便番号から市区町村まで正確に判定できます。
ここでは ADO(ActiveX Data Objects) を利用してCSVを高速に読み込み、郵便番号から市区町村を抽出する完全版の例を紹介します。


コード例(ADO+郵便番号→市区町村)

Sub PostalCodeToCityWithADO()
    Dim conn As Object, rs As Object
    Dim filePath As String, code As String
    
    ' CSVファイルのパス(日本郵便公式のKEN_ALL.CSVをダウンロードして指定)
    filePath = "C:\data\KEN_ALL.CSV"
    
    ' ADO接続を作成
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & Left(filePath, InStrRev(filePath, "\")) & ";" & _
              "Extended Properties=""text;HDR=No;FMT=Delimited"""
    
    ' A列の郵便番号を判定してB列に市区町村を出力
    Dim lastRow As Long, i As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastRow
        code = Replace(Cells(i, 1).Value, "-", "") ' ハイフン削除
        
        ' SQLで郵便番号を検索(KEN_ALL.CSVの仕様)
        ' fields(2)=郵便番号, fields(7)=市区町村
        Set rs = conn.Execute("SELECT F7 FROM [" & Mid(filePath, InStrRev(filePath, "\") + 1) & "] WHERE F3='" & code & "'")
        
        If Not rs.EOF Then
            Cells(i, 2).Value = rs.Fields(0).Value ' 市区町村
        Else
            Cells(i, 2).Value = "不明"
        End If
        rs.Close
    Next i
    
    conn.Close
End Sub
VB

解説

  • KEN_ALL.CSV → 日本郵便公式の全国郵便番号簿
  • ADO接続 → CSVを「テーブル」としてSQL検索可能
  • SELECT F7 → 市区町村フィールドを抽出(CSVの仕様により列番号は変わる場合あり)
  • 郵便番号を正規化 → ハイフン削除、7桁に統一

実行イメージ

A列(郵便番号)B列(市区町村)
1000001千代田区
1500002渋谷区
2200012横浜市西区
5300001大阪市北区
8100003福岡市博多区
9999999不明

実務での応用

  • 顧客リストの郵便番号から市区町村を一括補完
  • 地域別集計 → 市区町村単位で顧客数や売上を分析
  • 配送ラベル作成 → 郵便番号から住所を自動生成
  • 不正データ検出 → 存在しない郵便番号を「不明」として抽出

💡 この「ADO+郵便番号辞書」の仕組みを使えば、全国規模の顧客データを高速に住所補完・集計できます。

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