Excel VBA | SQLite FTSで複数キーワード検索を行い、関連度スコアで並べ替える応用例

VBA
スポンサーリンク

SQLiteの FTS(Full-Text Search) を使えば、住所データに対して複数キーワード検索を行い、さらに 関連度スコア(rank) を利用して結果を並べ替えることができます。これにより「東京都 AND 渋谷区」など複数条件を柔軟に検索し、最も関連度の高い候補を上位に表示できます。


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例(複数キーワード+ランキング)

-- 「東京都 AND 渋谷区」を含む住所を検索し、関連度順に並べ替え
SELECT PostalCode, Prefecture, City, Town, rank
FROM PostalFTS
WHERE PostalFTS MATCH '東京都 AND 渋谷区'
ORDER BY rank;
SQL

💡 MATCH 句に複数キーワードを指定すると、両方を含むレコードが抽出されます。
rank はFTSが計算する関連度スコアで、より一致度が高いものが上位に並びます。


VBAコード例(FTS+複数キーワード検索+ランキング)

Sub QueryPostalSQLiteFTSMultiKeyword()
    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 & ";"
    
    ' 検索キーワード(例:「東京都 AND 渋谷区」)
    keywords = "東京都 AND 渋谷区"
    
    ' 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

実行イメージ

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

郵便番号都道府県市区町村町域スコア
1500002東京都渋谷区渋谷1
1500003東京都渋谷区道玄坂3
1500004東京都渋谷区鶯谷町5

実務での応用

  • 複数条件検索 → 都道府県+市区町村など複数キーワードで柔軟に検索
  • 関連度順に並べ替え → 曖昧検索でも最も一致度の高い候補を優先表示
  • 顧客データ補完 → 不完全な住所から最適な候補を提示
  • マーケティング分析 → 特定地域に関連する顧客を抽出し、関連度順に分析

💡 この方法を使えば、複数キーワード検索でも関連度順に最適な候補を提示でき、顧客管理や配送業務の効率がさらに向上します。

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