vba筛选函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单筛选
使用Range对象的AutoFilter方法,可对Range区域的数据中使用“自动筛选”筛选一
个列表。该方法的语法如下:
表达式.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
各参数的含义如下:
—Field:相对于作为筛选基准字段(从列表左侧开始,最左侧的字段为第一个字段)的字段的整型偏移量。
—Criteria1:筛选条件,为一个字符串。使用“=”可查找空字段,或者使用“<>”查找非空字段。如果省略该参数,则搜索条件为All。如果将Operator设置为xlTop10Items,则Criteria1指定数据项个数(例如,“10”)。
—Operator:指定筛选类型,可用常量如表12-2所示。
表12-2 筛选类型
—Criteria2:第二个筛选条件(一个字符串)。与Criteria1和Operator一起组合成复合筛选条件。
—VisibleDropDown:如果为True,则显示筛选字段的自动筛选下拉箭头。如果为False,则隐藏筛选字段的自动筛选下拉箭头。默认值为True。
高级筛选
Excel的高级筛选可用VBA代码来实现,使用Range对象的AdvancedFilter方法即可进行高级筛选。
高级筛选必须在工作表中定义一个条件区域,通过该条件从列表中筛选或复制数据。如果初始选定区域为单个单元格,则使用单元格的当前区域。AdvancedFilter方法的语法格式如下:
表达式.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)
该方法各参数的含义如下:
—Action:指定是否就地复制或筛选列表,可使用常量xlFilterCopy(将筛选出的数据复制到新位置)或xlFilterInPlace(保留数据不动)。
—CriteriaRange:条件区域。如果省略该参数,则没有条件限制。
—CopyToRange:如果Action为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 Action:=xlFilterInPlace, CriteriaRange:=rng
Application.Calculation = xlCalculationAutomatic '自动重算
Application.ScreenUpdating = True
End Sub
以上代码首先获取工作表中条件区域和筛选数据区域的引用,最后使用AdvancedFilter 方法对数据区域进行筛选
取消筛选
Sub 取消筛选()
Dim ws1 As Worksheet
For Each ws1 In Worksheets
ws1.AutoFilterMode = False
Next
End Sub
对日期段做筛选
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