Excel VBA オートフィルタで数値を条件に絞り込み(AutoFilterメソッド)

オートフィルタ操作

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

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

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

1.数値で絞り込む際の注意事項

まず一番最初に数値で絞り込む際に、理解しておくことがあります。

数値を「等しい」と指定する際には「セルに入力されている数値」で絞り込むのではなく、「見えている数値の表示形式」で絞り込む必要があります。

本来のVBAの操作とちょっと違った感じですね。

具体的に言いますと、セルに1000と入力されていても、表示形式が「\1000」であれば「=\1000」と絞り込み指定しなければいけないということです。

ただし、以上「>=」、以下「<=」などの「等しい」以外は入力された数値で大丈夫です。

2.数値を指定して絞り込む

上記の注意事項を踏まえたうえで、数値の絞り込み方法です。

数値で絞り込む場合は「=」、「<」、「>」と等しい、以上、以下、大きい、小さいといった不等号を使用して絞り込みをすることが多いです。

使い分け自体はそれほど難しくないと思いますが、それぞれ簡単なサンプルでご説明します。

データには次のようなサンプルデータを使用します。

指定した数値と等しい「=」で絞り込む

まずは、指定した数値と等しいという条件で絞り込みます。

D列が「10000」と等しいデータを絞り込みします。

Sub Sample1()

Dim MaxRow  As Long

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

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

End Sub

一つも絞り込めませんでした、実はこれは先ほどの注意事項を無視したコードです。

「10000」ではなく、「10,000」で絞り込みするのが正しいです。

Sub Sample2()

Dim MaxRow  As Long

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

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

End Sub

以上、以下で絞り込む

以上、以下で絞り込む場合は「>=」、「<=」となります。※「=」の位置は右です。

上記で説明した通り、「等しい」以外は数値は入力された「10000」でも正常に絞り込めます。

注意点はRange(Cells)で指定する場合には、「“>=” & Range」の様に「”>=”」を文字列として記述します。

以上で絞り込む
Sub Sample3()

Dim MaxRow  As Long

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

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

End Sub
以下で絞り込む
Sub Sample4()

Dim MaxRow  As Long

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

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

End Sub

指定数値より大きい、小さいで絞り込む

大きい「>」、小さい「<」で指定する事ができ、こちらも入力されている数値で指定できます。

こちらも注意点はRange(Cells)で指定する場合には、「“>” & Range」の様に「”>”」を文字列として記述します。

より大きいで絞り込む
Sub Sample5()

Dim MaxRow  As Long

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

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

End Sub
より小さいで絞り込む
Sub Sample6()

Dim MaxRow  As Long

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

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

End Sub

3.数値の範囲を指定して絞り込む

1つの条件ではなく○○~○○の間というような、範囲を指定する条件は次のように記述します。

次のコードは「10000以上~15000以下」と絞り込みしています。

ポイントは「Operator:=xlAnd」でAndを使用しているところです。

Sub Sample7()

Dim MaxRow  As Long

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

Range(Cells(1, 1), Cells(MaxRow, 4)) _
            .AutoFilter Field:=4, _
            Criteria1:=">=10000", _
            Operator:=xlAnd, _
            Criteria2:="<=15000"

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