VBAでオートフィルターを扱う方法をご紹介します。
VBAでオートフィルターを設定する #
RangeのAutoFilterを使用 #
VBAでオートフィルターを使用するにはRange
のAutoFilterメソッド
を使用します。
FilterTestシートにデータが入力されています。

このシートから下記の条件のデータをオートフィルターを使用して表示してみます。
- 種類が野菜
- 名前が空白ではない
- 備考が空白である
オートフィルターを設定するコード #
オートフィルターを設定するコードは以下になります。
Option Explicit
Sub setFilter(sht As Worksheet)
'###################################################################################
'シートにオートフィルターを設定する
'先頭行をヘッダーとする
'-----------------------------------------------------------------------------------
'引数 :ws シートオブジェクト
'###################################################################################
Dim lastRow As Long
Dim lastCol As Long
lastRow = getMaxRowUsedRange(sht)
lastCol = getMaxColUsedRange(sht)
sht.Range(sht.Cells(1, 1), sht.Cells(lastRow, lastCol)).AutoFilter _
field:=1, Criteria1:="野菜" '入力されている値が「野菜」
sht.Range(sht.Cells(1, 1), sht.Cells(lastRow, lastCol)).AutoFilter _
field:=2, Criteria1:="<>" '空白ではない
sht.Range(sht.Cells(1, 1), sht.Cells(lastRow, lastCol)).AutoFilter _
field:=3, Criteria1:="=" '空白である
End Sub
Function getMaxRowUsedRange(sht As Worksheet) As Long
getMaxRowUsedRange = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
End Function
Function getMaxColUsedRange(sht As Worksheet) As Long
getMaxColUsedRange = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column
End Function
sht.Range(sht.Cells(1, 1), sht.Cells(lastRow, lastCol)).AutoFilter _
field:=1, Criteria1:="野菜" '入力されている値が「野菜」
field
には数値を設定します。
Range
で指定した範囲内の何列目のデータに対してオートフィルターの条件を設定するか指定します。
Range
で指定した範囲の最も左の列が1となります。
今回はAからC列までの範囲を指定するので、A列が1,B列が2、C列が3になります。
Criteria1
にはオートフィルターの条件を指定します。
入力内容 | 意味 |
---|---|
“文字列” | 文字列と同じものだけを表示 |
“<>” | 空白ではないものを表示 |
“=” | 空白であるものを表示 |
シートの最終行と最終列を取得するためにgetMaxRowUsedRange
とgetMaxColUsedRange
を使用しています。
【VBA】UsedRangeで最終行・最終列を取得する
·2 分
Programming
VBA
オートフィルター設定コードのテスト #
test_setFilter
を実行するとオートフィルターを設定します。
Option Explicit
Sub test_setFilter()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("FilterTest")
Call setFilter(sht)
Set sht = Nothing
End Sub
実行結果は以下になります。
3行目のデータのみ条件に合っているので、3行目のデータだけ表示されます。
他のデータは条件が違うのでフィルターが掛かり、表示されません。

オートフィルターを解除する #
オートフィルターを解除するにはWorksheetオブジェクト
のFilterMode
を変更します。
オートフィルターを解除するコードは以下になります。
Option Explicit
Sub clearFilter(sht As Worksheet)
'###################################################################################
'シートにオートフィルターが設定されている場合、解除する
'-----------------------------------------------------------------------------------
'引数 :ws シートオブジェクト
'###################################################################################
If sht.FilterMode Then sht.ShowAllData
End Sub
Sub test_clearFilter()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("FilterTest")
If sht.FilterMode Then sht.ShowAllData
Set sht = Nothing
End Sub
If sht.FilterMode Then sht.ShowAllData
FilterMode
がTrue
のときはシートにオートフィルターが掛かっているので
Worksheet
のShowAllData
メソッドを使用してデータをすべて表示します。
参考 #
Range.AutoFilter メソッド (Excel) | Microsoft Learn
Worksheet.ShowAllData メソッド (Excel) | Microsoft Learn