日本郵便は公式サイトで 郵便番号データ(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 | 福岡県福岡市博多区博多駅前 |
実務での応用ポイント
- 顧客リストの郵便番号から住所を一括補完
- 不正郵便番号を検出して別シートに出力
- 都道府県別・市区町村別に集計
- 配送ラベル自動生成
💡 この方法を使えば「郵便番号から住所を正確に判定」でき、手入力の手間や誤記を大幅に減らせます。

