【问题标题】:Excel VBA Countifs with wildcard criteria - for dates带有通配符条件的 Excel VBA Countifs - 用于日期
【发布时间】:2015-08-28 11:50:58
【问题描述】:

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

我的日期和时间存储在 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 vba wildcard countif


    【解决方案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"))
    

    【讨论】:

    • 非常感谢!抱歉,我对 excel VBA 很陌生,
    【解决方案2】:

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

    【讨论】:

    • 感谢@Balinti 的回复,我尝试了这个过程,但是当我将日期转换为数字时,会有一个十进制等值的时间。是否有任何代码可以通过通配符比较数字以忽略小数位?前任。 A1 包含 42239.97 下面的代码不起作用:x = 42239 xdate2 = 42239 & "*" compl = WorksheetFunction.CountIfs(Range("a1:a5"), xdate2)
    • 您也可以将格式与 Format(Date, "MM_DD_YYYY") 一起使用
    • 我好像不明白我将在哪里使用格式语法,对不起,请您详细说明一下吗?
    【解决方案3】:

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

    【讨论】:

    • 好吧,我总是忘记,我在一家拥有上千年技术的公司工作。
    • 我使用 vba 是因为我从 MS Access DB 表中提取了数千条记录,该表包含人员姓名、任务、任务状态(例如已完成、进行中、已取消)、日期已完成/已取消我的报告,该报告显示在指定日期或周或月按人员姓名完成/取消/正在进行的任务。
    • 好的。 Vacips的答案应该是适当的方式。如果可能的话,我会在 SQL 中计算所有需要的数据,或者在使用字段值和 VBA 函数填充数据时(在一个循环中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多