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