Excel VBAのオートフィルタを操作するサンプルです。
目次
サンプル | オートフィルタを設定する |
値を1つ指定して絞り込む | |
値を2つ指定して絞り込む(配列) | |
配列で変数を使用する | |
年月を指定して絞り込む | |
数値に条件を指定する | |
絞り込みした表を別シートにコピーする | |
オートフィルタの絞り込みを解除する | |
行の最終行を取得する | |
シートにオートフィルタが設定されているかを確認する |
対象の表
上記の表に対してオートフィルタを設定/設定解除します。
1行目のセルの左下にある下向きの三角形の箇所がオートフィルタです。
A列の年月の値は、yyyy/mm/dd形式です。
表示形式を「日付」の2001年3月形式にしています。
オートフィルタを設定する
Sub test1()
Range("A1").Select
Selection.AutoFilter
End Sub
3行目は、A1を指定しています。
4行目は、AutoFilterでオートフィルタを設定しています。
オートフィルタが設定された状態で4行目が実行されるとオートフィルタが解除されます。
値を1つ指定して絞り込みする
Sub test1()
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:="ノート"
ActiveSheet.Range("A1").AutoFilter Field:=3, Criteria1:="A社"
End Sub
3行目は、商品列(Field:=2)でノートを指定しています。
その後に5行目で、メーカー名(Field:=3)でA社を指定しています。
2つの項目がand条件で絞られた状態になります。
値を2つ指定して絞り込みする(配列)
Sub test1()
ActiveSheet.Range("A1").AutoFilter Field:=2, _
Operator:=xlFilterValues, _
Criteria1:=Array("ノート", "消しゴム")
End Sub
3,4行目は、商品列(Field:=2)の値のノートまたは消しゴムを指定しています。
Arrayは配列です。
配列の変数の場合、4行目のxlFilterValuesが必要です。
配列で変数を使用する
Sub test1()
Dim arr(2) As String
arr(0) = "ノート"
arr(1) = "消しゴム"
ActiveSheet.Range("A1").AutoFilter Field:=2, _
Operator:=xlFilterValues, _
Criteria1:=Array(arr)
End Sub
3~5行目は、配列です。
9行目は、配列を変数で指定しています。
配列の変数の場合、8行目のxlFilterValuesが必要です。
年月を指定して絞り込む
Sub test1()
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="2020年8月"
End Sub
3行目は、A列の年月(Field:=1)で絞り込んでいます。
セル内の値は、2020/8/3等入っていますが、表示されている2020年8月等の値で絞り込めます。
数値に条件を指定する
Sub test1()
ActiveSheet.Range("A1").AutoFilter Field:=4, Criteria1:=">150"
End Sub
3行目は、D列の金額(Field:=4)が150より大きい数値という指定をしています。
絞り込みした表を別シートにコピーする
Sub test1()
Range("A1").CurrentRegion.Copy Sheets("Sheet3").Range("A1")
End Sub
3行目は、オートフィルタで絞り込まれて表示されているデータのみ、別シートにコピーします。
以下のように表示されます。(sheet1で商品をノート、メーカー名をA社で絞って上記コードを実行)
オートフィルタの絞り込みを解除する
Sub test1()
ActiveSheet.ShowAllData
End Sub
ShowAllDataでオートフィルタの絞り込みを解除します。
行の最終行を取得する
オートフィルタで絞り込まれていた場合、絞り込まれた状態の最終行を取得します。
Sub test1()
Dim num As Integer
num = ActiveSheet.Range("A1").End(xlDown).Row
Debug.Print num
End Sub
シートにオートフィルタが設定されているかを確認する
Sub test1()
Dim wkFilter As AutoFilter
Set wkFilter = Sheets("Sheet1").AutoFilter
If Not wkFilter Is Nothing Then
Debug.Print "オートフィルタの設定あり"
End If
End Sub
Sheet1にオートフィルタが設定されているか確認しています。
設定されている場合、8行目の文字列が出力されます。
関連の記事
オートフィルタの操作をマクロに記録してコードを確認できます。方法は以下を参照願います。