带有通配符标准的Excel VBA Countif - 用于日期

时间:2015-08-28 11:50:59

标签: excel vba wildcard countif

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

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

A1 = 8/12/2015 12:00 AM

A2 = 8/25/2015 3:00 PM

A3 = 8/23/2015 4:00 AM

A4 = 8/12/2015 1:30 AM

A5 = 8/20/2015 12:00 AM

            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

3 个答案:

答案 0 :(得分: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")

修改 对我来说,添加格式功能是必要的,以保持日期为人类格式供Excel理解。如果要确保它有效,请更改这样的Worksheetfunction行:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果它不是必须在VBA和countif(我不知道目标是什么): = SUMPRODUCT((地板(值(A1:A5),1)=日期(2015,8,20))* 1) 否则有循环选项等等,但没有目的,很难指出正确的方向