日本郵便が公開している 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+郵便番号辞書」の仕組みを使えば、全国規模の顧客データを高速に住所補完・集計できます。

