VBA知識--資料自動篩選(AutoFilter)
阿新 • • 發佈:2021-06-22
在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:
-
多列單條件篩選
Range('B1').AutoFilter Field:=2,Criteria1:='=女' Range('B1').AutoFilter Field:=3,Criteria1:='>=90'B
-
單列多條件的篩選(條件數量 >= 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實用很靈活,根據需求指定條件。