大量の郵便番号データを扱う場合、毎回CSVを読み込むのは非効率です。
そこで キャッシュをファイルに保存して再利用 すれば、次回以降は高速に検索できます。
ここでは VBA を使って Dictionaryキャッシュをテキストファイルに保存/読み込みする例を紹介します。
コード例(キャッシュ保存+再利用)
Option Explicit
Dim postalCache As Object
' キャッシュを初期化(ファイルから読み込み)
Sub LoadPostalCache()
Dim fso As Object, ts As Object, line As String, parts As Variant
Set postalCache = CreateObject("Scripting.Dictionary")
Set fso = CreateObject("Scripting.FileSystemObject")
' キャッシュファイルが存在する場合は読み込み
If fso.FileExists("C:\data\PostalCache.txt") Then
Set ts = fso.OpenTextFile("C:\data\PostalCache.txt", 1, False)
Do Until ts.AtEndOfStream
line = ts.ReadLine
parts = Split(line, "|")
If UBound(parts) >= 3 Then
postalCache(parts(0)) = Array(parts(1), parts(2), parts(3))
End If
Loop
ts.Close
End If
End Sub
' キャッシュをファイルに保存
Sub SavePostalCache()
Dim fso As Object, ts As Object, key As Variant, addrParts As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("C:\data\PostalCache.txt", 2, True)
For Each key In postalCache.Keys
addrParts = postalCache(key)
ts.WriteLine key & "|" & addrParts(0) & "|" & addrParts(1) & "|" & addrParts(2)
Next key
ts.Close
End Sub
' 郵便番号から住所を取得(キャッシュ利用)
Function GetAddressByPostalCode(code As String) As String
code = Replace(code, "-", "")
If postalCache.Exists(code) Then
Dim addrParts As Variant
addrParts = postalCache(code)
GetAddressByPostalCode = addrParts(0) & addrParts(1) & addrParts(2)
Else
GetAddressByPostalCode = "不明"
End If
End Function
' バッチ処理例
Sub BatchPostalLookup()
Dim wsSource As Worksheet, wsResult As Worksheet
Dim lastRow As Long, i As Long
' キャッシュをロード
If postalCache Is Nothing Then LoadPostalCache
Set wsSource = ThisWorkbook.Sheets("顧客リスト")
Set wsResult = ThisWorkbook.Sheets("住所結果")
lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
wsResult.Cells(i, 1).Value = wsSource.Cells(i, 1).Value
wsResult.Cells(i, 2).Value = GetAddressByPostalCode(wsSource.Cells(i, 1).Value)
Next i
' 更新されたキャッシュを保存
SavePostalCache
End Sub
VB解説
- キャッシュファイル形式 →
郵便番号|都道府県|市区町村|町域のテキスト形式 - LoadPostalCache → ファイルからキャッシュを読み込む
- SavePostalCache → Dictionaryをファイルに保存
- GetAddressByPostalCode → 郵便番号をキーに住所を返す
- BatchPostalLookup → 顧客リストを一括処理し、結果を別シートに出力
実行イメージ
PostalCache.txt(保存ファイル)
1000001|東京都|千代田区|千代田
1500002|東京都|渋谷区|渋谷
2200012|神奈川県|横浜市西区|みなとみらい
住所結果シート(出力)
| 郵便番号 | 住所 |
|---|---|
| 100-0001 | 東京都千代田区千代田 |
| 1500002 | 東京都渋谷区渋谷 |
| 2200012 | 神奈川県横浜市西区みなとみらい |
実務での応用
- 初回のみCSVを読み込み、以降はキャッシュファイルを利用 → 高速化
- キャッシュファイルを共有 → チーム全員で同じ住所辞書を利用可能
- 定期更新 → 日本郵便の最新CSVを読み込んでキャッシュを更新
💡 この方法を使えば「郵便番号検索を高速化しつつ、再利用可能なキャッシュ」を構築できます。


