Vba 如何使用数组自动筛选条件

Vba 如何使用数组自动筛选条件,vba,excel,Vba,Excel,我只是在学习如何使用数组,我有点被困在如何使用数组作为自动筛选条件的输入上。我想用值设置一个数组,然后用这些值过滤excel电子表格。我做了下面的代码,但当我尝试自动筛选时,它总是抛出一个错误 这是我的代码 Dim I As Integer ReDim arr(1 to var) As Variant 'var is defined in a different function with a # I = 1 For Each rngValue In rngValues.cells 'rngVa

我只是在学习如何使用数组,我有点被困在如何使用数组作为自动筛选条件的输入上。我想用值设置一个数组,然后用这些值过滤excel电子表格。我做了下面的代码,但当我尝试自动筛选时,它总是抛出一个错误

这是我的代码

Dim I As Integer
ReDim arr(1 to var) As Variant 'var is defined in a different function with a #
I = 1
For Each rngValue In rngValues.cells 'rngValues is defined in a different function
    If rngValue ="c" then
       arr(I)=rngValue.Offset(0,2)
    End If
    I = I +1
Next rngValue

arr(I) = "="

With ws1
    .[A1].Autofilter Field:=1, Criteria1:=arr, operator:xlfiltervalues
End With

也许你可以试试这个

   fil = Split(Join(Application.Transpose(Range("list")))) ' here list is the name of the range
    Range("A1").AutoFilter field:=1, Criteria1:=fil, Operator:=xlFilterValues 'it will only filter the list values

通过如下所示直接传递范围值,可以更快地将范围值传递给数组:

Dim arr As Variant '~~> no need to re-dimension
arr = Application.Transpose(rngValues) '~~> Transpose produces 1D array
ws1.Range("A1").AutoFilter 1, arr, xlFilterValues
请注意,RNG值应仅包含一个维度范围区域。
然而,如果你想坚持你的逻辑;此外,要处理二维范围或非连续范围,以下内容也应适用:

Dim i As Long: i = 1
ReDim arr(1 to rngValues.Cells.Count)
For Each rngValue In rngValues
    arr(i) = rngValue.Value
    i = i + 1
Next
ws1.Range("A1").AutoFilter 1, arr, xlFilterValues

在任何情况下,请确保生成的用作过滤器的阵列为1D。

我已经尝试过类似的方法,但我使用的是阵列而不是范围。谢谢!只是好奇-第二个代码与我尝试的代码有何不同?我遇到的问题是,我也只想要myvalues范围中的一些值,而不是所有值,这就是为什么我使用Array的原因。我尝试了第二个代码,但仍然导致range类的自动筛选方法失败error@Monduras唯一的区别是您使用的是计算范围
[A1]
。逻辑基本相同。我看不出有什么理由不起作用。在您编辑的代码中,我认为您应该在if语句中迭代I。