Excel VBA | 日本郵便の公式CSVをVBAで読み込んで判定する実務的な応用例

VBA
スポンサーリンク

日本郵便は公式サイトで 郵便番号データ(CSV形式) を公開しています。これをVBAで読み込めば、郵便番号から都道府県や市区町村を正確に判定できます。実務では「顧客リストの郵便番号から住所を自動補完する」などに活用されます。


コード例(CSV読み込み+判定)

Sub PostalCodeLookup()
    Dim fso As Object, ts As Object
    Dim line As String, fields As Variant
    Dim dict As Object
    Dim code As String
    
    ' 郵便番号→住所の辞書を作成
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' CSVファイルを開く(日本郵便の公式データをダウンロードして指定)
    ' 例: KEN_ALL.CSV(全国郵便番号簿)
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\data\KEN_ALL.CSV", 1, False, -1) ' -1はUTF-16
    
    ' CSVを1行ずつ読み込み
    Do Until ts.AtEndOfStream
        line = ts.ReadLine
        fields = Split(line, ",")
        
        ' 郵便番号(7桁)と住所情報を辞書に登録
        ' KEN_ALL.CSVの仕様: fields(2)=郵便番号, fields(6)=都道府県, fields(7)=市区町村, fields(8)=町域
        code = Replace(fields(2), """", "") ' ダブルクォート除去
        dict(code) = Replace(fields(6), """", "") & _
                     Replace(fields(7), """", "") & _
                     Replace(fields(8), """", "")
    Loop
    ts.Close
    
    ' 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, "-", "")
        If dict.Exists(code) Then
            Cells(i, 2).Value = dict(code)
        Else
            Cells(i, 2).Value = "不明"
        End If
    Next i
End Sub
VB

解説

  • KEN_ALL.CSV → 日本郵便が公開している全国郵便番号簿
  • FileSystemObject → CSVを1行ずつ読み込む
  • Dictionary → 郵便番号をキーに住所を保持
  • 判定処理 → A列の郵便番号を検索し、B列に住所を出力

実行イメージ

A列(郵便番号)B列(住所)
1000001東京都千代田区千代田
1500002東京都渋谷区渋谷
2200012神奈川県横浜市西区みなとみらい
5300001大阪府大阪市北区梅田
8100003福岡県福岡市博多区博多駅前

実務での応用ポイント

  • 顧客リストの郵便番号から住所を一括補完
  • 不正郵便番号を検出して別シートに出力
  • 都道府県別・市区町村別に集計
  • 配送ラベル自動生成

💡 この方法を使えば「郵便番号から住所を正確に判定」でき、手入力の手間や誤記を大幅に減らせます。

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