使用数组和xlFilterValues进行过滤

我已经写了一个定义数组的代码,然后使用该数组作为条件来过滤一个范围。 这是代码的摘录。 不知怎的,它过滤掉了一切,并不显示过滤的值。

Dim N As Long Sheets("Calculations").Select With Sheets("Calculations") N = .Cells(Rows.Count, "A").End(xlUp).Row ReDim ary(1 To N) For i = 1 To N ary(i) = .Cells(i, 1) Next i End With Sheets("Data").Select Range(Range("A1"), Range("A1").End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select With Selection .AutoFilter Field:=36, Criteria1:=ary, Operator:=xlFilterValues End With 

列A数字中的值是什么? 当使用variables数组作为Criteria1和xlFilterValues时,必须将数字视为文本,所以使用ary(i) = CStr(.Cells(i, 1).Value2)来构build数组。

 Dim ary As Variant With Worksheets("sheet1").Cells(1, 1).CurrentRegion 'with true numbers in column A this DOES NOT work ary = Array(1, 2, 3) .AutoFilter field:=1, Criteria1:=ary, Operator:=xlFilterValues 'with true numbers in column A this DOES work ary = Array("1", "2", "3") .AutoFilter field:=1, Criteria1:=ary, Operator:=xlFilterValues End With 

是的,这似乎反直觉,但是这是如何筛选数字使用xlFilterValues数组。 date可能会出现类似的问题。

按数组筛选时,必须使用转置方法:

Criteria1:=之后Criteria1:=你的代码应该读取Application.Transpose(ary)