取消篩選
Sub 取消篩選()
Dim ws1 As Worksheet
For Each ws1 In Worksheets
ws1.AutoFilterMode = False
Next
End Sub
簡單篩選
使用Range對象的AutoFilter方法,可對Range區域的數據中使用「自動篩選」篩選一個列表。該方法的語法如下:
表達式.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
各參數的含義如下:
— Field:相對於作為篩選基準字段(從列表左側開始,最左側的字段為第一個字段)的字段的整型偏移量。
— Criteria1:篩選條件,為一個字符串。使用「=」可查找空字段,或者使用「<>」查找非空字段。如果省略該參數,則搜索條件為All。如果將Operator設置為xlTop10Items,則Criteria1指定數據項個數(例如,「10」)。
— Operator:指定篩選類型,可用常量如表12-2所示。
表12-2 篩選類型
名 稱 |
值 |
描 述 |
xlAnd |
1 |
條件1和條件2的邏輯與 |
xlBottom10Items |
4 |
顯示最低值項(條件1中指定的項數) |
xlBottom10Percent |
6 |
顯示最低值項(條件1中指定的百分數) |
xlFilterCellColor |
8 |
單元格顏色 |
xlFilterDynamic |
11 |
動態篩選 |
xlFilterFontColor |
9 |
字體顏色 |
xlFilterIcon |
10 |
篩選圖標 |
xlFilterValues |
7 |
篩選值 |
xlOr |
2 |
條件1和條件2的邏輯或 |
xlTop10Items |
3 |
顯示最高值項(條件1中指定的項數) |
xlTop10Percent |
5 |
顯示最高值項(條件1中指定的百分數) |
— Criteria2:第二個篩選條件(一個字符串)。與Criteria1和Operator一起組合成復合篩選條件。
— VisibleDropDown:如果為True,則顯示篩選字段的自動篩選下拉箭頭。如果為False,則隱藏篩選字段的自動篩選下拉箭頭。默認值為True。
高級篩選
Excel的高級篩選可用VBA代碼來實現,使用Range對象的AdvancedFilter方法即可進行高級篩選。
高級篩選必須在工作表中定義一個條件區域,通過該條件從列表中篩選或複製數據。如果初始選定區域為單個單元格,則使用單元格的當前區域。AdvancedFilter方法的語法格式如下:
表達式.AdvancedFilter(Act ion, CriteriaRange, CopyToRange, Unique)
該方法各參數的含義如下:
— Act ion:指定是否就地複製或篩選列表,可使用常量xlFilterCopy(將篩選出的數據複製到新位置)或xlFilterInPlace(保留數據不動)。
— CriteriaRange:條件區域。如果省略該參數,則沒有條件限制。
— CopyToRange:如果Act ion為xlFilterCopy,則該參數為複製行的目標區域。否則,忽略該參數。
— Unique:如果為True,則只篩選唯一記錄。如果為False,則篩選符合條件的所有記錄。默認值為False。
Sub 高級篩選()
Dim rng As Range, rng1 As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual '手動重算
Set rng = Worksheets("Sheet1").Range("A19").CurrentRegion
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Set rng1 = Worksheets("Sheet1").Range("A1").CurrentRegion
Set rng1=rng1.Offset(1,0).Resize(rng1.Rows.Count-1, rng1.Columns.Count)
rng1.AdvancedFilter Act ion:=xlFilterInPlace, CriteriaRange:=rng
Application.Calculation = xlCalculationAutomatic '自動重算
Application.ScreenUpdating = True
End Sub
以上代碼首先獲取工作表中條件區域和篩選數據區域的引用,最後使用AdvancedFilter方法對數據區域進行篩選
對日期段做篩選
Private Sub vv()
Dim i As Date, j As Date
i = InputBox("請輸入 『開始』 查詢時間 輸入格式 如 2006/1/1")
j = InputBox("請輸入 『結束』 查詢時間 輸入格式 如 2006/1/1")
Selection.AutoFilter Field:=5, Criteria1:="<" & j, Operator:=xlAnd, _
Criteria2:=">" & i
End Sub
AutoFilter 方法
Sub vbaAFilter()
Dim Rng As Range '自動篩選結果範圍
Dim theRow As Range '各區域的資料列
Dim theArea As Range '各區域範圍
With Sheets("Orders") '在Orders工作表中
Set Rng = .UsedRange '所有資料範圍
Rng.AutoFilter Field:=2, Criteria1:="BOTTM" '篩選出顧客為BOTTOM者
Rng.AutoFilter Field:=3, Criteria1:="3" '再篩選出員工代號為3者
'設定篩選結果範圍
Set Rng = Rng.Resize(Rng.Rows.Count - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible)
End With
'遍歷篩選結果範圍各AREA
For Each theArea In Rng.Areas
'遍歷各AREA的各列
For Each theRow In theArea.Rows
theRow.Select '選定此列
MsgBox theRow.Address '顯示此列的位址
Next
Next
Rng.AutoFilter '解除自動篩選狀態
End Sub
留言列表