Excel VBA | SQLiteで部分一致検索(LIKE)と複合インデックスを組み合わせる応用例

VBA
スポンサーリンク

SQLiteでは LIKE を使った部分一致検索が可能ですが、通常のインデックスは LIKE '%xxx%' のような前方にワイルドカードがある検索では効きません。
しかし 複合インデックス+前方一致(LIKE 'xxx%' を組み合わせることで、都道府県+市区町村+町域の検索を高速化できます。


インデックス作成SQL

-- 郵便番号テーブル
CREATE TABLE PostalTable (
    PostalCode TEXT PRIMARY KEY,
    Prefecture TEXT,
    City TEXT,
    Town TEXT
);

-- 複合インデックス(都道府県+市区町村+町域)
CREATE INDEX idx_pref_city_town ON PostalTable(Prefecture, City, Town);
SQL

部分一致検索SQL例

-- 東京都+渋谷区+町域が「渋」から始まる住所を検索
SELECT PostalCode, Prefecture, City, Town
FROM PostalTable
WHERE Prefecture = '東京都'
  AND City = '渋谷区'
  AND Town LIKE '渋%';
SQL

この場合、複合インデックスが効いて検索が高速化されます。


VBAコード例(SQLite+LIKE検索)

Sub QueryPostalSQLiteLikeComposite()
    Dim conn As Object, rs As Object
    Dim dbPath As String
    Dim pref As String, city As String, townPrefix As String
    
    dbPath = "C:\data\PostalCache.sqlite"
    
    ' SQLite接続(ODBCドライバ利用)
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Driver=SQLite3 ODBC Driver;Database=" & dbPath & ";"
    
    ' 検索条件(例:東京都+渋谷区+町域が「渋」で始まる)
    pref = "東京都"
    city = "渋谷区"
    townPrefix = "渋"
    
    ' LIKE検索(前方一致)
    Set rs = conn.Execute("SELECT PostalCode, Town FROM PostalTable " & _
                          "WHERE Prefecture='" & pref & "' AND City='" & city & "' " & _
                          "AND Town LIKE '" & townPrefix & "%'")
    
    ' 結果をImmediate Windowに表示
    Do Until rs.EOF
        Debug.Print rs.Fields(0).Value & " → " & rs.Fields(1).Value
        rs.MoveNext
    Loop
    
    rs.Close
    conn.Close
End Sub
VB

実行イメージ

検索条件:東京都+渋谷区+町域が「渋」で始まる

郵便番号町域
1500002渋谷
1500003渋谷町

実務での応用

  • 部分一致検索で柔軟な住所補完 → 町域の一部しか分からなくても検索可能
  • 顧客リストの曖昧データ補正 → 「渋」だけ入力されている場合でも候補を提示
  • マーケティング分析 → 特定の町域グループ(例:「渋」で始まる地域)を抽出
  • 検索最適化 → 複合インデックス+前方一致で高速処理

💡 この方法を使えば、曖昧な住所入力でも高速に候補を検索でき、顧客データの補完や地域分析に役立ちます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました