新浪博客

【转载】VBA 自动筛选 Autofilter的用法

2012-05-02 14:09阅读:

AutoFilter 方法
参阅 应用于 示例 特性
使用“自动筛选”筛选出一个列表。Variant 类型。
注释 Worksheet 对象中应用AutoFilter属性,返回一个AutoFilter对象。
expression.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
expression 必需。该表达式返回“应用于”列表中的对象之一。
Field Variant 类型,可选。相对于作为筛选基准字段(从列表左侧开始,最左侧的字段为第一个字段)的偏移量。
Criteria1 Variant 类型,可选。筛选条件(一个字符串;例如,“101”)。使用“=”可搜索到空字段,或者使用“<>”可搜索
到非空字段。如果省略该参数,则搜索条件为 All。如果将 Operator 设为 xlTop10ItemsCriteria1 则指定数据项个数(例如,“10”)。
Operator XlAutoFilterOperator类型,可选。
XlAutoFilterOperator 可为以下 lAutoFilterOperator 常量之一。
xlAnd default
xlBottom10Items
xlBottom10Percent
xlOr
xlTop10Items
xlTop10Percent
可使用 xlAnd xlOr Criteria1 Criteria2 组合成复合筛选条件。

Criteria2 Variant 类型,可选。第二筛选条件(一个字符串)。与 Criteria1 Operator 组合成复合筛选条件。
VisibleDropDown Variant 类型,可选。如果为 True 则显示筛选字段自动筛选的下拉箭头。如果为 False 则隐藏筛选字段自动筛选的下拉箭头。默认为 True
说明如果忽略全部参数,此方法仅在指定区域切换自动筛选下拉箭头的显示。
示例
本示例从工作表 Sheet1 上的 A1 单元格开始筛选出一个清单,该清单中只显示字段一为字符串“Otis”的数据项。字段一的下拉箭头将被隐藏。
Worksheets('Sheet1').Range('A1').AutoFilter _
field:=1, _
Criteria1:='Otis'
VisibleDropDown:=False
例子1:

Sub 多表查询()

'多表查询,自动筛选法
'http://club.excelhome.net/dispbbs.asp?BoardID=3&ID=217587&replyID=&skin=0
' 2007-1-29
Dim Sht As Worksheet
Dim s As String
Dim Tbl, Tbl2
Dim a As Integer, b As Integer

Sheets('查詢').Select
s = Range('a2').Value
a = 1
For Each Sht In ActiveWorkbook.Worksheets
If Sht.Name <> Sheets(1).Name Then
Sht.Select
Range('A1').Select

Selection.AutoFilter 自动筛选
Selection.AutoFilter Field:=1, Criteria1:=s
Selection.CurrentRegion.Select
b = [a:a].SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).Cells.Count - 1

Set Tbl = ActiveCell.CurrentRegion
If b = 0 Then
GoTo 100
Else
Tbl.Offset(1, 0).Resize(Tbl.Rows.Count - 1, Tbl.Columns.Count).Select
Selection.Copy
Sheets('查詢').Select
Range('A1').Select
Selection.CurrentRegion.Select
Set Tbl2 = ActiveCell.CurrentRegion
If a = 1 Then
Tbl2.Offset(1, 1).Resize(1, 1).Select
Else
Tbl2.Offset(Tbl2.Rows.Count, 1).Resize(1, 1).Select
End If
ActiveSheet.Paste
a = a + 1
End If
Else
End If
100:
Next Sht
End Sub


例子2:
对多列进行筛选,并通过vba输入公式显示汇总结果:



Sub Oval3_Click()
'Range('A2:U65536').Sort Key1:=Range('F1'), order1:=xlAscending 排序
ActiveSheet.AutoFilterMode = False ' 取消先前的筛选
Dim Rng As Range
Set Rng = ActiveSheet.Range([a1], [r65536].End(3))
With Rng
'.AdvancedFilter xlFilterInPlace, Sheets(2).[a1:a13]
'.AutoFilter field:=4, Criteria1:=Sheets(2).[a1:a13] ' 在D列筛选
.AutoFilter field:=7, Criteria1:='UNIT TEST' ' 在G列筛选
.AutoFilter field:=8, Criteria1:='PASS' ' 在H列筛选
End With
Range('V1').FormulaR1C1 = '=Subtotal(9,R[2]C[-4]:R[65535]C[-4])' '输入公式
End Sub


我的更多文章

下载客户端阅读体验更佳

APP专享