我搜索了其他帖子并发现了类似的问题,但没有任何可以帮助我的具体内容。我正在尝试获取一个字符串数组并将其用作过滤条件。这很棘手,因为数组是由一个函数创建的,并且具有可变数量的元素和内容。我需要自动过滤器来检查它并检查每个元素的列E 。
我已经尝试过两种方式
1)
With Sheet17
.Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr)
End With
结果:对E列应用过滤器,但无法选择任何选项
2)
For i = 0 To counter - 1
With Sheet17
.Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i))
End With
Next
注意:Counter是一个整数,表示数组中的元素数 结果:这个正确循环遍历数组,但只选择过滤器上的最后一个选项 - 大概是因为每次循环返回它都会重新开始并取消选中所有其他选项,所以最后只保留最新选项。
答案 0 :(得分:10)
如果您只引用E列,则无需从数组中转置单个元素,也无法将条件放入5 th 字段。
Dim i As Long, arr As Variant
arr = Array(1, 3)
With Sheet17
'to filter each value in the array one at a time
For i = 0 To UBound(arr)
.Columns("E").AutoFilter Field:=1, Criteria1:=arr(i)
Next i
'my values were numbers - AutoFilter likes strings in its array
For i = LBound(arr) To UBound(arr)
arr(i) = CStr(arr(i))
Next i
'to filter all values in the array at once specify xlFilterValues
.Columns("E").AutoFilter Field:=1, Criteria1:=arr, _
Operator:=xlFilterValues
End With
传递数组时指定Operator:=xlFilterValues
,Range.AutoFilter Method喜欢字符串作为数组中的值。
答案 1 :(得分:6)
AutoFilter的Excel文档提供了一些指导。 Operator
参数采用XlAutoFilterOperator指定Criteria1
的解释方式。在您的情况下,指定值xlFilterValues
将导致Criteria1
被正确解释为过滤器值数组。
以下示例演示了这一点:
Dim arr As Variant
arr = Array("Alpha", "Bravo", "Charlie")
Sheet17.Range("E1").AutoFilter _
Field:=5, _
Criteria1:=arr, _
Operator:=xlFilterValues