大量の郵便番号データ(日本郵便公式の KEN_ALL.CSV など)を扱う場合、FileSystemObject で1行ずつ読む方法は遅くなりがちです。
そこで ADO(ActiveX Data Objects) を使うと、CSVを「データベースのテーブル」として高速に読み込めます。
例1:CSVをADOで高速に読み込む
Sub ReadCSVWithADO()
Dim conn As Object, rs As Object
Dim filePath As String
' 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"""
' レコードセットを取得
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM [" & Mid(filePath, InStrRev(filePath, "\") + 1) & "]", conn
' データをExcelに書き込み(例:A列に郵便番号、B列に住所)
Dim row As Long
row = 1
Do Until rs.EOF
Cells(row, 1).Value = rs.Fields(2).Value ' 郵便番号
Cells(row, 2).Value = rs.Fields(6).Value & rs.Fields(7).Value & rs.Fields(8).Value ' 住所
row = row + 1
rs.MoveNext
Loop
rs.Close
conn.Close
End Sub
VBポイント
- Jet OLEDB Provider を使ってCSVを「テーブル」として扱う
SELECT * FROM [KEN_ALL.CSV]でSQLクエリを実行できる- 大量データでも高速に読み込める
例2:郵便番号から都道府県だけ抽出する高速版
Sub PostalCodeToPrefectureFast()
Dim conn As Object, rs As Object
Dim filePath As String, code As String
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(6)=都道府県)
Set rs = conn.Execute("SELECT F6 FROM [KEN_ALL.CSV] 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ポイント
- SQLで直接検索 → 郵便番号から都道府県を即座に抽出
- 大量データでも高速 → ループ+SQLで効率的に処理
- 住所全体ではなく都道府県だけ → 集計や地域分析に最適
実行イメージ
| A列(郵便番号) | B列(都道府県) |
|---|---|
| 1000001 | 東京都 |
| 1500002 | 東京都 |
| 2200012 | 神奈川県 |
| 5300001 | 大阪府 |
| 8100003 | 福岡県 |
| 9999999 | 不明 |
実務での応用
- 顧客リストの郵便番号から都道府県別に集計
- 配送ラベル作成 → 郵便番号から住所を補完
- マーケティング分析 → 地域別売上や顧客分布を高速に算出
💡 ADOを使うと「CSVをデータベースのように扱える」ので、郵便番号辞書のような大規模データ処理に非常に有効です。


