Excel VBA | ADOで郵便番号から住所を検索して別シートに出力するバッチ処理の応用例

Excel VBA VBA
スポンサーリンク

大量の顧客リストを処理するとき、郵便番号から住所を検索して別シートにまとめるバッチ処理は非常に便利です。
ここでは、日本郵便公式の KEN_ALL.CSV をADOで読み込み、郵便番号をキーに住所を検索し、結果を別シートに出力する例を紹介します。


スポンサーリンク

コード例

Sub PostalCodeBatchExport()
    Dim conn As Object, rs As Object
    Dim filePath As String, code As String
    Dim wsSource As Worksheet, wsResult As Worksheet
    Dim lastRow As Long, i As Long
    
    ' CSVファイルのパス(日本郵便公式のKEN_ALL.CSVをダウンロードして指定)
    filePath = "C:\data\KEN_ALL.CSV"
    
    ' 元データシート(郵便番号がA列にある)
    Set wsSource = ThisWorkbook.Sheets("顧客リスト")
    
    ' 結果出力用シート(なければ作成)
    On Error Resume Next
    Set wsResult = ThisWorkbook.Sheets("住所結果")
    If wsResult Is Nothing Then
        Set wsResult = ThisWorkbook.Sheets.Add
        wsResult.Name = "住所結果"
    End If
    On Error GoTo 0
    
    ' 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"""
    
    ' 元データの最終行を取得
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    
    ' ヘッダー行を設定
    wsResult.Cells(1, 1).Value = "郵便番号"
    wsResult.Cells(1, 2).Value = "都道府県"
    wsResult.Cells(1, 3).Value = "市区町村"
    wsResult.Cells(1, 4).Value = "町域"
    
    ' 郵便番号を順に検索して結果を別シートに出力
    For i = 2 To lastRow
        code = Replace(wsSource.Cells(i, 1).Value, "-", "") ' ハイフン削除
        
        ' SQLで検索(KEN_ALL.CSVの仕様: F3=郵便番号, F6=都道府県, F7=市区町村, F8=町域)
        Set rs = conn.Execute("SELECT F6, F7, F8 FROM [" & Mid(filePath, InStrRev(filePath, "\") + 1) & "] WHERE F3='" & code & "'")
        
        wsResult.Cells(i, 1).Value = wsSource.Cells(i, 1).Value ' 元の郵便番号
        
        If Not rs.EOF Then
            wsResult.Cells(i, 2).Value = rs.Fields(0).Value ' 都道府県
            wsResult.Cells(i, 3).Value = rs.Fields(1).Value ' 市区町村
            wsResult.Cells(i, 4).Value = rs.Fields(2).Value ' 町域
        Else
            wsResult.Cells(i, 2).Value = "不明"
            wsResult.Cells(i, 3).Value = "不明"
            wsResult.Cells(i, 4).Value = "不明"
        End If
        rs.Close
    Next i
    
    conn.Close
End Sub
VB

実行イメージ

顧客リストシート(入力)

郵便番号
100-0001
1500002
2200012
5300001
8100003

住所結果シート(出力)

郵便番号都道府県市区町村町域
100-0001東京都千代田区千代田
1500002東京都渋谷区渋谷
2200012神奈川県横浜市西区みなとみらい
5300001大阪府大阪市北区梅田
8100003福岡県福岡市博多区博多駅前

実務での応用

  • 顧客リストの郵便番号から住所を一括補完
  • 別シートに保存することで元データを保持
  • 地域別集計や配送ラベル作成に直結
  • 不正郵便番号を「不明」として監査用に抽出

💡 この「バッチ処理」を使えば、数千件の顧客リストでも一括で住所補完でき、業務効率が大幅に向上します。

タイトルとURLをコピーしました