使用范围数组的多个标准的自动过滤器

Pie*_*e44 1 excel vba excel-vba

来自问题Excel宏过滤器基于多个单元格值并使用从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
Run Code Online (Sandbox Code Playgroud)

Tin*_*Man 6

使用多个数值应用过滤器时记录宏显示过滤器需要一个字符串数组.

ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Criteria1:=Array("1", "2", "3"), Operator:=xlFilterValues
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,data = [A2:A5].Value返回一个2D数组

在此输入图像描述

让我们展平2D数组: data = [A2:A5].Value

在此输入图像描述

现在我们有一个数组,我们需要将它转换为一个String数组.

我们可以通过首先创建一个分隔的字符串来完成此操作

 Data = Join(Data, ",")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 然后拆分那个字符串

在此输入图像描述

   ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Operator:=xlFilterValues, _
Criteria1:=Split(Join(Application.Transpose(Range("A2:A6")), ","), ",")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

TextJoin() 真的简化了这个过程.

    ActiveSheet.Range("$B$1:$C$11").AutoFilter Field:=2, Operator:=xlFilterValues, _
Criteria1:=Split(WorksheetFunction.TextJoin(",", True, Range("A2:A6")), ",")
Run Code Online (Sandbox Code Playgroud)