今回はAutoFilterメソッドで複数条件で絞り込む方法をご説明します。
今回は基本となる文字列を使用して1列を複数条件で絞り込む方法や、複数列で条件を指定して絞り込む方法をご説明します。
数値、日付、色で絞り込む際も同じ方法です。
複数条件の前に基本的な絞り込みの方法についても、併せてご説明したいと思います。
AutoFilterメソッド の基本的な使用方法や構文、引数一覧、文字列操作などは次の記事をご覧ください。
- オートフィルタを設定する
- 文字列や空白、ワイルドカード、複数条件で絞り込み
- 数値で絞り込み
- 日付で絞り込み
- 色で絞り込み
- オートフィルタの解除とクリア
- オートフィルタの設定と絞り込みを取得する
- オートフィルタで絞り込みしたデータをコピーする
- オートフィルタで文字列と数値の絞り込み条件を取得する
1.文字列を指定して絞り込む
まずは1つの列を文字列で絞り込む方法を簡単にご説明します。
データは次のようなデータを使用します。
1列を1文字列で絞り込み
B列の店舗名を「店舗B」で絞り込みします。
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:="店舗B"
End Sub
「Range(Cells(1, 1), Cells(MaxRow, 4))」で指定したセルの範囲をフィルターで設定し、「AutoFilter Field:=2」で2列目を指定します。
「Criteria1:=”店舗B”」で2列目を指定した文字列(店舗B)で絞り込み指定します。
1列で2つの文字列で絞り込み
B列の店舗名を「店舗B」もしくは「店舗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:="店舗B", _
Operator:=xlOr, _
Criteria2:="店舗C"
End Sub
先ほどと同様に「Range(Cells(1, 1), Cells(MaxRow, 4))」で指定したセルの範囲をフィルターで設定し、「AutoFilter Field:=2」で2列目を指定します。
「Operator:=xlOr」で「1つ目の条件もしくは」という条件で2つ目の文字列を指定します。
「Criteria2:=“店舗C”」で2つ目の文字列を指定します。
1列で3文字列以上で絞り込み
2つまでの条件とは記述方法が異なり、3つ以上の条件を指定する場合はそのまま条件を指定出来ません。
1列の文字列は3つ以上の場合配列を使用する必要があります。
「店舗B」、「店舗C」、「店舗D」の3文字列で絞り込みです。
Sub Sample3()
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
「ListArray(0) =」~「ListArray(2) =」 で条件となる文字列を配列に格納します。
「.AutoFilter Field:=2」は基本通り同じです。
「Criteria1:=ListArray」で最初に条件を格納した配列を指定します。
「Operator:=xlFilterValues」は「値」を意味します。
2.複数列を文字列で絞り込み
次は複数列を文字列で絞り込みする方法です。
データは先ほどと同じデータを使用します。
実はそれほぞ難しくありません。
データ範囲は固定ですので「With」で囲っています。
複数列を1文字列で絞り込み
各列(Field:=)をそれぞれ指定するだけです。
Sub Sample4()
Dim MaxRow As Long
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
With Range(Cells(1, 1), Cells(MaxRow, 4))
.AutoFilter Field:=2, Criteria1:="店舗B"
.AutoFilter Field:=3, Criteria1:="メーカーA"
End With
End Sub
複数列を2文字列で絞り込み
こちらも1列で2文字列で絞り込む方法を各列指定するだけになります。
Sub Sample5()
Dim MaxRow As Long
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
With Range(Cells(1, 1), Cells(MaxRow, 4))
.AutoFilter Field:=2, _
Criteria1:="店舗B", _
Operator:=xlOr, _
Criteria2:="店舗C"
.AutoFilter Field:=3, _
Criteria1:="メーカーA", _
Operator:=xlOr, _
Criteria2:="メーカーB"
End With
End Sub
複数列を3文字列以上で絞り込む
最後に複数列をそれぞれ3文字列以上で絞り込む方法です。
ここでは配列を2つ用意してそれぞれに絞り込みたい文字列を格納しています。
実際には動的に配列を作成して格納するかと思います。
Sub Sample6()
Dim ListArray1(2) As String
Dim ListArray2(2) As String
Dim MaxRow As Long
ListArray1(0) = "店舗B"
ListArray1(1) = "店舗C"
ListArray1(2) = "店舗D"
ListArray2(0) = "メーカーA"
ListArray2(1) = "メーカーB"
ListArray2(2) = "メーカーC"
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
With Range(Cells(1, 1), Cells(MaxRow, 4))
.AutoFilter Field:=2, _
Criteria1:=ListArray1, _
Operator:=xlFilterValues
.AutoFilter Field:=3, _
Criteria1:=ListArray2, _
Operator:=xlFilterValues
End With
End Sub
3.まとめ
今回は複数列を1文字列~3文字列以上で絞り込む方法のご説明でした。
1文字列の絞り込み方法を理解しているとそれほど難しくありません。
基本的な文字列での絞り込み方法の説明でしたが、空白の除外など絞り込み方法は「AutoFilterメソッドで文字列や空白、ワイルドカード、複数条件で絞り込み」をご覧ください。