Excel VBA AutoFilterメソッドで複数列で条件を指定して絞り込み

オートフィルタ操作

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

今回は基本となる文字列を使用して複数列で条件を指定して絞り込む方法をご説明します。

数値、日付、色で絞り込む際も同じ方法です。

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

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

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

1列で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

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メソッドで文字列や空白、ワイルドカード、複数条件で絞り込み」をご覧ください。

タイトルとURLをコピーしました