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