在 VBA 中使用多个单元格值作为自动筛选的条件2

在 VBA 中使用多个单元格值作为自动筛选的条件2

我想过滤A1:A3日期列中的多个日期A4:A1000。我使用宏录制模式手动完成了此操作,见图1。我获得了此代码标准2 ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=1, Operator:= _ xlFilterValues,Criteria2:=Array(2, "1/1/2021", 2, "12/25/2021", 2, "7/26/2021")现在,我想传递A1:A3给 VBA 中的 Criteria2 实现自动化。

我从不同的网站找到了一些帮助文章并尝试过但失败了。以下是我发现但失败了的内容:

标准1 := Split(Join(Application.Transpose(Range("A1:A2")), ","), ",")如果我们使用标准1. 这仅适用于两个单元格。但这对我的目的来说毫无用处。

我想A1:A3在 VBA 中传递给 Criteria2。Criteria2:=A1:A3. 将来我可能会改变单元格数量Criteria2:=A1:A10代替Criteria2:=A1:A3

感谢帮助

答案1

当您为 Criteria2 传递日期条件时,必须包含日期层次结构级别。级别枚举为:

0 = year
1 = month
2 = day
3 = hour
4 = minute
5 = second

因此你需要构建一个合适的数组。

一种方法是使用函数:

Function dateFilter(rg As Range)
    Dim w, c As Range, i As Long

ReDim w(0 To rg.Count * 2 - 1)
i = -2
For Each c In rg
    Debug.Print c.Address
    i = i + 2
    w(i) = 2 'the level
    w(i + 1) = c 'the cell value
Next c

dateFilter = w
End Function

然后,您可能会在您的标准中使用类似以下内容的内容:

Criteria2:=dateFilter([A2:A5])

如果您有大量此类操作,则将范围对象读入变量数组后生成条件可能会更快(而不是一次访问一个单元格),但编程会变得更加复杂。

相关内容