Excel VBA AutoFilterメソッドで文字列や空白、ワイルドカード、複数条件で絞り込み

オートフィルタ操作

今回はAutoFilterメソッドで文字列で絞り込む方法をご説明します。

AutoFilterメソッドでオートフィルタを使用するという事は、次にする事は絞り込みかと思います。

AutoFilterメソッド の基本的な使用方法や構文、引数一覧、文字列操作などは次の記事をご覧ください。

1.文字列を指定して絞り込む

まずは基本となる文字列を指定して絞り込む方法です。

オートフィルタでは絞り込みをする文字列を指定する場合「=」、「<」、「>」を先頭につける必要があります。

省略した場合には「=」を付けた事になります。

指定した文字列で抽出する

次のようなデータをオートフィルタで絞り込みします。

次のコードは上記のデータをB列の店舗名で「店舗C」で絞り込みします。

Sub Sample1()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="店舗C"

End Sub

「Field:=2」でB列を指定して、「Criteria1:=”店舗C”」で絞り込みたい文字列を指定します。

指定した文字列を除外する

先ほどは「Criteria1:=”店舗C”」と指定して絞り込みしましたが、本来「Criteria1:=”=店舗C”」と指定します。

除外する場合は「Criteria1:=”<>店舗C”」と記述する事で、指定した文字列を除外する事ができます。

Sub Sample2()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="<>店舗C"

End Sub

上記の結果の様に、店舗Cが除外されました。

2.空白セルで絞り込む/除外する

オートフィルタで絞り込みをする際に、空白セルが存在する事があります。

空白セルを指定する場合についてです。

空白セルで絞り込む

空白セルを指定する場合は「=””」と指定します。

文字列同様に「=」を省略して、「””」と指定する事も可能です。

また、「”=”」と記述しても同様の結果になります。

次の様なデータを使用します。

Sub Sample3()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="="

End Sub

もしくは次のように「Criteria1:=”=”」を「Criteria1:=””」でも同じ結果になります。

空白セルを除外する

空白を除外するには「Criteria1:=”=”」の部分を「Criteria1:=”<>”」の様に指定する事で、空白を除外できます。

Sub Sample4()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="<>"

End Sub

3.ワイルドカードで部分一致で絞り込む

オートフィルタの絞り込みの際にワイルドカードを使用する事で、指定した文字列を含む絞り込みが可能になります。

ワイルドカードとは「*」や「?」などの文字です。

絞り込む値が数値や日付の場合には、正常に絞り込みできないのでご注意ください。

上記のデータをCを含む店舗で絞り込みしてみたいと思います。

Sub Sample5()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="*C"

End Sub

4.特殊記号を文字列として絞り込む

3のワイルドカードの「*」や「?」、オートフィルタに使用されている「=」、「<」、「>」といった記号を文字列として使用しているセルが存在する場合に、ワイルドカードを文字列として指定する方法です。

これはオートフィルタに限らずですが、チルダを付けて「~*」の様に記述します。

先ほどの空白のデータの空白を「*」とした次のデータを「*」で絞り込みします。

Sub Sample6()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, Criteria1:="~*"

End Sub

5.複数の文字列で絞り込み

AutoFilterメソッドで指定できる文字列は2つまでとなっています。

3つ以上の文字列で指定する場合は少し工夫が必要になります。

2つの文字列で絞り込み

「Operator:=xlOr」で店舗Bもしくは店舗Cを文字列として指定して絞り込みしています。

Sub Sample7()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, _
            Criteria1:="店舗B", _
            Operator:=xlOr, _
            Criteria2:="店舗C"

End Sub

3つ以上の文字列で絞り込み

3つ以上の文字列で指定する場合には、配列を使用します。

3つ以上の文字列で指定する場合は「=」で指定する事しかできません。

また、ワイルドカードも使用できません。

Sub Sample8()

Dim ListArray(2) As String
Dim MaxRow  As Long

ListArray(0) = "店舗B"
ListArray(1) = "店舗C"
ListArray(2) = "店舗D"

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=2, _
            Criteria1:=ListArray, _
            Operator:=xlFilterValues
            
End Sub
タイトルとURLをコピーしました