发布网友
共1个回答
热心网友
Excel VBA的AutoFilter方法提供了一种强大的筛选功能,能根据指定条件在数据中进行筛选。其语法为Range对象.AutoFilter(Field,Criterial1,Operator,Criteria2,VisibleDropDown)。AutoFilter方法有五个可选参数,分别为Field、Criteria1、Operator、Criteria2和VisibleDropDown。
Field参数:指定筛选字段的整数偏移量,从列表左侧开始计算,最左侧为字段一。
Criteria1参数:指定筛选条件(字符串)。用“=”查找空字段,用“>”查找非空字段。若忽略此参数,筛选条件为全部。若Operator参数为xlTop10Items,那么Criteria1参数指定要筛选的项目数量。
Operator参数:决定筛选方式,如等值、包含、不包含等。
Criterial2参数:指定第二个筛选条件(字符串),与Criteria1和Operator联合构成复合筛选条件。
VisibleDropDown参数:设置为True显示筛选下拉箭头,设置为False隐藏筛选下拉箭头,默认为True。
忽略所有参数时,AutoFilter方法仅简单地切换指定区域的自动筛选下拉箭头显示状态。
以下为具体示例:
1. 筛选2020年夏天的数据:range("e1").autofilter2,"夏";range("e1").autofilter1,"2020"
2. 筛选大于300且小于400的值:Range("e1").AutoFilter 4, ">300", xlAnd, "<400"
3. 筛选春和夏:Range("e1").AutoFilter 2, "春", xlOr, "夏"
4. 筛选最大前5个:Range("e1").AutoFilter 4, 5, xlTop10Items
5. 筛选最小后3个:Range("e1").AutoFilter 4, 3, xlBottom10Items
6. 筛选最大前30%:Range("e1").AutoFilter 4, 30, xlTop10Percent
7. 筛选最大前20%:Range("e1").AutoFilter 4, 20, xlBottom10Percent
8. 筛选"春", "夏", "秋":Range("d1").AutoFilter 2, Array("春", "夏", "秋"), xlFilterValues
9. 筛选单元底色为黄色:Range("d1").AutoFilter 4, RGB(255, 255, 0), xlFilterCellColor
10. 筛选单元格底色为红色:Range("d1").AutoFilter 4, RGB(255, 0, 0), xlFilterCellColor
11. 筛选红色字体颜色:Range("d1").AutoFilter 4, RGB(255, 0, 0), xlFilterFontColor
12. 筛选图标:Range("d1").AutoFilter Field:=4, Criteria1:=ActiveWorkbook.IconSets(xl3Arrows).Item(1), Operator:=xlFilterIcon
13. 筛选大于平均值的值:Range("d1").AutoFilter 4, xlFilterAboveAverage, xlFilterDynamic
14. 筛选所有1月的日期:Range("d1").AutoFilter 5, xlFilterAllDatesInPeriodJanuary, xlFilterDynamic
实现删除已筛选数据的代码示例如下:
Sub testAutoFilter4()
Dim rng As Range
ActiveSheet.AutoFilterMode = False
Set rng = Range("A1:B10")
rng.AutoFilter Field:=1, Criteria1:="0"
With rng
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlShiftUp
.Worksheet.AutoFilterMode = False
End With
End Sub
取消筛选的代码示例:
Sheets("temp1").AutoFilterMode = False
If ActiveSheet.AutoFilterMode = True Then
ActiveSheet.AutoFilterMode = False
End If
实现高级筛选获得不重复记录的代码示例:
Sheets("Original").Range("a:aj").AdvancedFilter Action:=xlFilterCopy, unique:=True, CopytoRange:=sh.Sheets("Close(M)").Range("a1")