Excel VBA | SQLite FTSで複数キーワード検索にOR条件やNEAR演算子を組み合わせる応用例

VBA
スポンサーリンク

SQLiteの FTS(Full-Text Search) では、複数キーワード検索に OR条件NEAR演算子 を組み合わせることで、柔軟な住所検索が可能になります。
これにより「東京都 OR 神奈川県」や「渋谷 NEAR 道玄坂」のような検索を効率的に行えます。


FTSテーブル作成例

-- FTS5を利用した住所検索用テーブル
CREATE VIRTUAL TABLE PostalFTS USING fts5(
    PostalCode,
    Prefecture,
    City,
    Town,
    content=''
);

-- 通常のPostalTableからデータをコピー
INSERT INTO PostalFTS(PostalCode, Prefecture, City, Town)
SELECT PostalCode, Prefecture, City, Town FROM PostalTable;
SQL

検索SQL例(OR条件)

-- 東京都 OR 神奈川県 に一致する住所を検索
SELECT PostalCode, Prefecture, City, Town, rank
FROM PostalFTS
WHERE PostalFTS MATCH '東京都 OR 神奈川県'
ORDER BY rank;
SQL

検索SQL例(NEAR演算子)

-- 「渋谷」と「道玄坂」が近接して出現する住所を検索
SELECT PostalCode, Prefecture, City, Town, rank
FROM PostalFTS
WHERE PostalFTS MATCH '渋谷 NEAR 道玄坂'
ORDER BY rank;
SQL

💡 NEAR はキーワード同士が近い位置にあるレコードを優先的に返します。
例えば「渋谷区道玄坂」と「渋谷区渋谷道玄坂」では、より近いものが上位に並びます。


VBAコード例(OR+NEAR検索)

Sub QueryPostalSQLiteFTSOrNear()
    Dim conn As Object, rs As Object
    Dim dbPath As String, keywords As String
    
    dbPath = "C:\data\PostalCache.sqlite"
    
    ' SQLite接続(ODBCドライバ利用)
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Driver=SQLite3 ODBC Driver;Database=" & dbPath & ";"
    
    ' 検索キーワード例(東京都 OR 神奈川県)
    keywords = "東京都 OR 神奈川県"
    
    ' OR検索
    Set rs = conn.Execute("SELECT PostalCode, Prefecture, City, Town, rank " & _
                          "FROM PostalFTS WHERE PostalFTS MATCH '" & keywords & "' ORDER BY rank")
    
    Debug.Print "=== OR検索結果 ==="
    Do Until rs.EOF
        Debug.Print rs.Fields(0).Value & " → " & rs.Fields(1).Value & rs.Fields(2).Value & rs.Fields(3).Value & _
                    " (score=" & rs.Fields(4).Value & ")"
        rs.MoveNext
    Loop
    rs.Close
    
    ' NEAR検索例(渋谷 NEAR 道玄坂)
    keywords = "渋谷 NEAR 道玄坂"
    Set rs = conn.Execute("SELECT PostalCode, Prefecture, City, Town, rank " & _
                          "FROM PostalFTS WHERE PostalFTS MATCH '" & keywords & "' ORDER BY rank")
    
    Debug.Print "=== NEAR検索結果 ==="
    Do Until rs.EOF
        Debug.Print rs.Fields(0).Value & " → " & rs.Fields(1).Value & rs.Fields(2).Value & rs.Fields(3).Value & _
                    " (score=" & rs.Fields(4).Value & ")"
        rs.MoveNext
    Loop
    
    rs.Close
    conn.Close
End Sub
VB

📊 実行イメージ

検索条件:東京都 OR 神奈川県

郵便番号都道府県市区町村町域
1000001東京都千代田区千代田
2200012神奈川県横浜市西区みなとみらい

検索条件:渋谷 NEAR 道玄坂

郵便番号都道府県市区町村町域
1500003東京都渋谷区道玄坂

🌱 実務での応用

  • 複数地域検索 → 「東京都 OR 神奈川県」で広域検索
  • 近接検索 → 「渋谷 NEAR 道玄坂」で関連度の高い住所を抽出
  • 曖昧検索補完 → 顧客データに部分的な住所しかない場合でも候補を提示
  • マーケティング分析 → 特定エリアに関連する顧客を柔軟に抽出

💡 OR条件とNEAR演算子を組み合わせることで、柔軟かつ精度の高い住所検索が可能になります。

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