我在范围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")))
答案 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-13
自43264
起为1900-01-01
天。
因此,使用"<=" & CDbl(CDate("13/06/2018"))
,您实际上会将单元格值与"<=43264"
进行比较。所以你比较一个值而不是一个文本。这是有效的,因为如果单元格格式为date
Excel实际存储了序列值,但显示格式化的字符串以便用户兼容。
<强>结论强>
如果您想比较日期,请始终比较它们的值而不是它们的字符串。