Vba 使用范围数组使用多个条件进行自动筛选
从问题中得出答案,并使用 我试图使用数组为大范围创建一个自动过滤器。 但是,它始终只使用数组范围内的最新值 如何使用过滤器中的所有值Vba 使用范围数组使用多个条件进行自动筛选,vba,excel,Vba,Excel,从问题中得出答案,并使用 我试图使用数组为大范围创建一个自动过滤器。 但是,它始终只使用数组范围内的最新值 如何使用过滤器中的所有值 Sub Test() Dim DirArray As Variant DirArray = [A2:A5].Value2 ActiveSheet.range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=DirArray End Sub 您可以使用以下选项: S
Sub Test()
Dim DirArray As Variant
DirArray = [A2:A5].Value2
ActiveSheet.range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=DirArray
End Sub
您可以使用以下选项:
Sub arraytest2()
Dim DirArray As Variant
DirArray = ActiveSheet.Range("A1:A5")
ActiveSheet.Range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=Array(ActiveSheet.Range("A" & LBound(DirArray) & ",A" & UBound(DirArray)))
End Sub
在使用多个数值应用筛选器时录制宏表明筛选器需要一个字符串数组 请注意,
data=[A2:A5]。Value
返回一个2D数组
让我们展平2D数组:data=[A2:A5]。Value
现在我们有了一个1D数组,我们需要将它转换为一个字符串数组
我们可以通过首先创建一个分隔字符串来实现这一点
然后分开那根线
TextJoin()
确实简化了流程
在没有看到您的数据的情况下,我可以看到您的代码中存在一个冲突问题,以及与您的数据发生另一个冲突的可能性
DirArray = Application.Transpose(.Range("A2:A5").value2)
DirArray = Application.Transpose(.Range("A2:A5").value2)
For i = LBound(DirArray) To UBound(DirArray)
DirArray(i) = CStr(DirArray(i))
Next i
Option Explicit
Sub Test()
Dim DirArray As Variant, i As Long
With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False
DirArray = Application.Transpose(.Range("A2:A5"))
For i = LBound(DirArray) To UBound(DirArray)
DirArray(i) = CStr(DirArray(i))
Next i
.Range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=DirArray
End With
End Sub
这可能有助于回答您的问题:它也只使用范围的最后一个值进行过滤。我没有正确理解您的问题,我做了一些编辑。。这就是你要找的吗?很好的完整答案:我很高兴你得到1000分:D
ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Operator:=xlFilterValues, _
Criteria1:=Split(WorksheetFunction.TextJoin(",", True, Range("A2:A6")), ",")
DirArray = Application.Transpose(.Range("A2:A5").value2)
DirArray = Application.Transpose(.Range("A2:A5").value2)
For i = LBound(DirArray) To UBound(DirArray)
DirArray(i) = CStr(DirArray(i))
Next i
Option Explicit
Sub Test()
Dim DirArray As Variant, i As Long
With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False
DirArray = Application.Transpose(.Range("A2:A5"))
For i = LBound(DirArray) To UBound(DirArray)
DirArray(i) = CStr(DirArray(i))
Next i
.Range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=DirArray
End With
End Sub