オートフィルタで、Google検索みたいに、複数条件を部分一致でまとめて一括検索する。

1 機能

 オートフィルタで、複数条件を部分一致でまとめて検索したい。たしかに、オートフィルタには検索窓があるが、OR検索できない。

 なお、フィルタオプションを使えば、予め抽出条件を検索対象の表の外に入力してOR検索できる。

 

allabout.co.jp

www.eurus.dti.ne.jp

 今回は、フィルタオプションではなく、オートフィルタの抽出結果として、複数条件をORで部分一致で表示できるようにする。

 

2 コード

以下は、「設定」という名前のシート上のA1セルを含む表にオートフィルタするケース。ボタンを作成し、このマクロを登録して使うのを想定。

Sub オートフィルタで複数条件を部分一致検索()
    Dim myAnswer As String
    myAnswer = Application.InputBox("複数入力するときは、スペースで区切ってください。", "検索ワード入力")
    
    'キャンセルor文字入力なしの場合は終了
    If myAnswer = "False" Or myAnswer = "" Then
        Exit Sub
    End If
    
    'スペースを半角に統一
    myAnswer = Replace(myAnswer, " ", " ")
    '半角スペースで分割して配列に格納
    Dim searchTerms As Variant
    searchTerms = Split(myAnswer, " ")
    
    '部分一致検索できるように配列の要素の前後に*付加
    Dim i As Long
    For i = LBound(searchTerms) To UBound(searchTerms)
        searchTerms(i) = "*" & searchTerms(i) & "*"
    Next
    
    'オートフィルタで、or条件で検索実行
    '(例)設定シートのA1セルを含むテーブルの2列目を検索
    ThisWorkbook.Sheets("設定").Range("A1").AutoFilter 2, searchTerms, xlFilterValues
End Sub