我正在学习使用数组,并且有点担心如何使用数组作为自动过滤标准的输入。我想设置一个包含值的数组,然后使用相同的值过滤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
答案 0 :(得分:0)
可能你可以试试这个
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
答案 1 :(得分:0)
您可以直接将Range值传递给数组,如下所示:
Dim arr As Variant '~~> no need to re-dimension
arr = Application.Transpose(rngValues) '~~> Transpose produces 1D array
ws1.Range("A1").AutoFilter 1, arr, xlFilterValues
请注意, rngValue 只应包含一个尺寸范围区域 但是,如果你想坚持你的逻辑;为了处理二维范围或非连续范围,下面应该有效:
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。