SQLiteは軽量で高速なデータベースですが、郵便番号検索のようにキー検索が多い処理ではインデックスを付けることでさらに最適化できます。
ここでは「郵便番号 → 住所検索」を高速化するために、SQLiteにインデックスを付けて利用する例を紹介します。
インデックス作成SQL
-- 郵便番号テーブルの作成
CREATE TABLE PostalTable (
PostalCode TEXT PRIMARY KEY,
Prefecture TEXT,
City TEXT,
Town TEXT
);
-- 郵便番号にインデックスを付与(PRIMARY KEYでも検索高速化されるが、補助的に利用可能)
CREATE INDEX idx_postalcode ON PostalTable(PostalCode);
SQLVBAコード例(SQLite+インデックス検索)
Sub QueryPostalSQLiteWithIndex()
Dim conn As Object, rs As Object
Dim dbPath As String, code As String
dbPath = "C:\data\PostalCache.sqlite"
' SQLite接続(ODBCドライバ利用)
Set conn = CreateObject("ADODB.Connection")
conn.Open "Driver=SQLite3 ODBC Driver;Database=" & dbPath & ";"
' 顧客リストシートから郵便番号を検索
Dim wsSource As Worksheet, wsResult As Worksheet
Dim lastRow As Long, i As Long
Set wsSource = ThisWorkbook.Sheets("顧客リスト")
Set wsResult = ThisWorkbook.Sheets("住所結果")
lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
code = Replace(wsSource.Cells(i, 1).Value, "-", "")
' インデックスを利用した検索(SQLiteが自動的に最適化)
Set rs = conn.Execute("SELECT Prefecture, City, Town FROM PostalTable WHERE PostalCode='" & code & "'")
wsResult.Cells(i, 1).Value = wsSource.Cells(i, 1).Value
If Not rs.EOF Then
wsResult.Cells(i, 2).Value = rs.Fields(0).Value ' 都道府県
wsResult.Cells(i, 3).Value = rs.Fields(1).Value ' 市区町村
wsResult.Cells(i, 4).Value = rs.Fields(2).Value ' 町域
Else
wsResult.Cells(i, 2).Value = "不明"
wsResult.Cells(i, 3).Value = "不明"
wsResult.Cells(i, 4).Value = "不明"
End If
rs.Close
Next i
conn.Close
End Sub
VB実行イメージ
| 郵便番号 | 都道府県 | 市区町村 | 町域 |
|---|---|---|---|
| 1000001 | 東京都 | 千代田区 | 千代田 |
| 1500002 | 東京都 | 渋谷区 | 渋谷 |
| 2200012 | 神奈川県 | 横浜市西区 | みなとみらい |
| 5300001 | 大阪府 | 大阪市北区 | 梅田 |
| 8100003 | 福岡県 | 福岡市博多区 | 博多駅前 |
実務での応用
- 大量データでも高速検索 → インデックスにより数万件以上でも即座に検索可能
- 顧客リストの住所補完 → 郵便番号から住所を一括補完
- 地域別集計 → 都道府県・市区町村単位で顧客数や売上を分析
- 配送ラベル作成 → 郵便番号から住所を自動生成
💡 SQLiteにインデックスを付けることで、郵便番号検索をほぼリアルタイムで処理できるようになります。


