来自问题Excel macro filter based on multiple cell values并使用来自 Creating an Array from a Range in VBA 的答案
我正在尝试使用数组为广泛的范围创建一个自动过滤器。 但是,它一直只使用数组范围内的最新值。
如何使用过滤器中的所有值?
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
最佳答案
在应用使用多个数值的过滤器时记录宏表明过滤器需要一个字符串数组。
ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Criteria1:=Array("1", "2", "3"), Operator:=xlFilterValues
注意 data = [A2:A5].Value
返回一个二维数组
让我们展平二维数组:data = [A2:A5].Value
现在我们有了一个一维数组,我们需要将它转换为字符串数组。
我们可以通过首先创建一个分隔字符串来做到这一点
Data = Join(Data, ",")
ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Operator:=xlFilterValues, _ Criteria1:=Split(Join(Application.Transpose(Range("A2:A6")), ","), ",")
TextJoin()
确实简化了过程。
ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Operator:=xlFilterValues, _ Criteria1:=Split(WorksheetFunction.TextJoin(",", True, Range("A2:A6")), ",")
关于vba - 使用范围数组的多个条件自动过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51206261/