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"))
我想知道我是否可以对日期使用通配符?
我在 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"))