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福岡県福岡市博多区博多駅前

実務での応用

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

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

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