在vba excel中使用COUNTIF的DATE标准的字符串值

时间:2018-06-13 06:01:26

标签: excel vba excel-vba criteria countif

我在范围B:B中有2个单元格,我希望在Excel中通过VBA应用libcrypto++9-dbg公式。

countif

我试过了

27/09/2017
13/06/2018

返回0

MsgBox (WorksheetFunction.CountIf(Range("B:B"), "27/09/2017"))

返回1

我试图找出如何通过

让宏返回两个日期值
MsgBox (WorksheetFunction.CountIf(Range("B:B"), CDate("27/09/2017")))

但是这会返回0

这似乎表明我不太明白如何通过字符串过滤countif中的日期。是否有可能分享替代方案?

我希望实现一个文本输入框,用户可以在其中输入日期字符串,然后在

上应用MsgBox (WorksheetFunction.CountIf(Range("B:B"), "<=" & CDate("13/06/2018")))

1 个答案:

答案 0 :(得分:1)

您需要先将日期转换为双倍,以比较独立于格式的日期的实际值。

 "<=" & CDbl(CDate("13/06/2018"))

为什么会这样?
如果您在string中将date"<=" & CDate("13/06/2018")连接在一起,date会转换为string,结果为"<=13/06/2018"(此处为date是一个字符串而不是一个值。)

如果您将date转换为double CDbl(CDate("13/06/2018"),则结果为43264,这是代表日期的序列号。 Excel中的日期存储为从1900-01-01开始计算的序列号,因此2018-06-1343264起为1900-01-01天。

因此,使用"<=" & CDbl(CDate("13/06/2018")),您实际上会将单元格值与"<=43264"进行比较。所以你比较一个值而不是一个文本。这是有效的,因为如果单元格格式为date Excel实际存储了序列值,但显示格式化的字符串以便用户兼容。

<强>结论
如果您想比较日期,请始终比较它们的值而不是它们的字符串。

另见:How to use dates and times in Excel