Excel VBA 具有通配符条件的 Countifs - 对于日期

Excel VBA Countifs with wildcard criteria - for dates

我想知道我是否可以对日期使用通配符?

我在 A1:A5 上存储了带时间的日期,我想计算有多少项目
无论时间如何,条件为“8/12/2015”,输出 compl 应为 2,因为 A1 和 A4 包含日期“8/12/2015”

A1 = 2015 年 8 月 12 日 12:00 上午

A2 = 2015 年 8 月 25 日 3:00 下午

A3 = 2015 年 8 月 23 日 4:00 上午

A4 = 2015 年 8 月 12 日 1:30 上午

A5 = 2015 年 8 月 20 日 12:00 上午

            Sub counter()

            With Sheet1
            Dim compl As String
            Dim xdate As String, xdate2 As String
            xdate = "08/12/2015"
            xdate2 = xdate & "*"

            compl = WorksheetFunction.CountIfs(Range("a1:a5"), xdate2)
                Debug.Print compl
            End With

            End Sub

在 Excel 中,日期存储为自 1/1/1970 以来的数字。这意味着你写的日期是 42239。 当 2 个小数位是小时时。所以当这个数字将包含特定日期的所有单元格时,您可以使用函数 round(带有 0 个数字)。

如果它不必在 VBA 和 countif 中(我不明白目标是什么): =sumproduct((floor(value(A1:A5),1)=date(2015,8,20))*1) 否则有循环等选项,但没有目的很难指向正确的方向

确保你的日期是日期,而不是字符串。

确保使用 ISO 标准格式,而不是一些随机的日期顺序。

Dim xdate As date
xdate = "2015-08-12"

compl = WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & xdate, _
                                   Range("a1:a5"), "<" & (xdate + 1))

此外,您不需要 VBA,只需像这样使用 Excel 的 COUNTIFS 函数:

=COUNTIFS(a1:a5,">=2015-08-28",a1:a5,"<2015-08-29")

编辑 对我来说,添加 Format 函数对于将日期保持为人类格式以便 Excel 理解是必要的。像这样更改 Worksheetfunction 行,如果你想确保它有效:

WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & Format(xdate, "yyyy-mm-dd"), _
                           Range("a1:a5"), "<" & Format(xdate + 1, "yyyy-mm-dd"))