在VBA語句中,我們經常需要對滿足某些條件的數據進行處理,這個時候我們要用到AutoFilter這個功能。AutoFilter這個函數功能很強大,在數據批量處理中應用非常頻繁。AutoFilter函數的語法:Range對象.AutoFilter(Field,Criterial1,Operator,Criteria2,VisibleDropDown)
名稱 | 必需/可選 | 數據類型 | 說明 |
---|---|---|---|
Field | 可選 | Variant | 相對於作為篩選基准字段(從列表左側開始,最左側的字段為第一個字段)的字段的整型偏移量。 |
Criteria1 | 可選 | Variant | 條件(字符串;例如,“101”)。 使用 "=" 查找空白字段,使用 "<>" 查找非空白字段,使用 "><" 選擇數據類型中的(否數據)字段。如果此參數被省略,條件為“全部”。 如果 Operator 是 xlTop10Items,則 Criteria1 指定項數(例如“10”)。 |
Operator | 可選 | XlAutoFilterOperator | 一個指定篩選器類型的 XlAutoFilterOperator 常量。(XlAutoFilterOperator的選擇見具體的鏈接) |
Criteria2 | 可選 | Variant | 第二個條件(字符串)。 與 Criteria1 和 Operator 一起組合成復合篩選條件。 也用作日期字段的單一條件(按日、月或年篩選)。 后跟一個數組,該數組用於詳述和篩選 Array(Level, Date)。 其中,Level 為 0-2(年、月、日),Date 為篩選期內的一個有效日期。 |
SubField | 可選 | Variant | 對其應用條件的數據類型中的字段(例如,來自地理位置的“人口”字段或來自股票的“交易量”字段)。 省略此值目標是“(顯示值)”。 |
VisibleDropDown | 可選 | Variant | 如果為 True,則顯示已篩選字段的 AutoFilter 下拉箭頭。 如果為 False,則隱藏已篩選字段的 AutoFilter 下拉箭頭。 默認情況下為 True。 |
實例說明
-
單列單條件篩選
Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=s Selection.CurrentRegion.Select b = [a:a].SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).Cells.Count - 1
-
多列單條件篩選
Range('B1').AutoFilter Field:=2,Criteria1:='=女' Range('B1').AutoFilter Field:=3,Criteria1:='>=90'
-
單列多條件的篩選(條件數量 >= 2)
一列的自動篩選只能有兩個條件,不過可以允許多個值篩選(Array)ActiveSheet.Range("$A$1:$F$19").AutoFilter Field:=3,Criteria1:=">=80", Operator:=xlAnd,Criteria2:="<90"'兩個條件
With sht.Sheets("temp1").Range("a2:o1048576") .AutoFilter field:=1, Criteria1:=Array("M154", "M156", "M158", "M160", "M186"), Operator:=xlFilterValues '大於2個以上的條件采用array進行篩選 .Copy sht.Sheets("temp2").Cells(1, 1) '兩個以上的條件選用Array End With
-
高級篩選獲得不重復記錄
Sheets("Original").Range("a:aj").AdvancedFilter Action:=xlFilterCopy, unique:=True, CopytoRange:=sh.Sheets("Close(M)").Range("a1")
-
取消篩選
sht.Sheets("temp1").AutoFilterMode = False '取消篩選狀態
If ActiveSheet.AutoFilterMode = True Then '判斷,並取消篩選狀態ActiveSheet.AutoFilterMode = False
End If
Autofilter實用很靈活,根據需求指定條件。