Excel VBA学习笔记05_数据自动筛选(AutoFilter)

发布网友

我来回答

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")

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com