今回は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