Excel VBA | SQLite FTSで複数キーワード検索にNOT条件を組み合わせる応用例

VBA
スポンサーリンク

SQLiteの FTS(Full-Text Search) では、複数キーワード検索に NOT条件 を組み合わせることで「あるキーワードを含み、別のキーワードは含まない」検索が可能です。
これにより「東京都は含むが渋谷区は除外」といった柔軟な検索ができます。


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例(NOT条件)

-- 「東京都」を含むが「渋谷区」を含まない住所を検索
SELECT PostalCode, Prefecture, City, Town, rank
FROM PostalFTS
WHERE PostalFTS MATCH '東京都 NOT 渋谷区'
ORDER BY rank;
SQL

💡 NOT 演算子を使うことで、特定のキーワードを除外できます。
この例では「東京都」を含む住所のうち「渋谷区」を除外して結果を返します。


VBAコード例(FTS+NOT検索)

Sub QueryPostalSQLiteFTSNot()
    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 & ";"
    
    ' 検索キーワード(例:「東京都 NOT 渋谷区」)
    keywords = "東京都 NOT 渋谷区"
    
    ' FTS検索+ランキング
    Set rs = conn.Execute("SELECT PostalCode, Prefecture, City, Town, rank " & _
                          "FROM PostalFTS WHERE PostalFTS MATCH '" & keywords & "' ORDER BY rank")
    
    ' 結果をImmediate Windowに表示
    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

実行イメージ

検索条件:東京都 NOT 渋谷区

郵便番号都道府県市区町村町域
1000001東京都千代田区千代田
1600001東京都新宿区西新宿
1310045東京都江戸川区船堀

実務での応用

  • 特定地域を除外した検索 → 「東京都だが渋谷区は除外」など柔軟な条件設定
  • 顧客リストのフィルタリング → 特定エリアを除外して分析やマーケティングに活用
  • 配送業務の効率化 → 配送対象外エリアを除外してラベル作成
  • 曖昧検索補完 → 「東京都」全体から特定区を除外して候補を提示

💡 NOT条件を組み合わせることで、不要な地域を除外した効率的な検索が可能になります。

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