【转载】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
设为
xlTop10Items,
Criteria1
则指定数据项个数(例如,“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