gpt4 book ai didi

vba - 在 vba excel 中使用 COUNTIF 的 DATE 条件的字符串值

转载 作者:行者123 更新时间:2023-12-04 20:31:02 25 4
gpt4 key购买 nike

我在范围 B:B 中有 2 个单元格,我希望应用 countif通过 Excel 中的 VBA 公式。

27/09/2017
13/06/2018

我努力了
MsgBox (WorksheetFunction.CountIf(Range("B:B"), "27/09/2017"))

这返回 0
MsgBox (WorksheetFunction.CountIf(Range("B:B"), CDate("27/09/2017")))

这返回 1

我试图弄清楚如何让宏返回两个日期值,通过
MsgBox (WorksheetFunction.CountIf(Range("B:B"), "<=" & CDate("13/06/2018"))) 

然而这返回 0

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

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

最佳答案

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

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

为什么是这样?
如果你连接一个 stringdate喜欢 "<=" & CDate("13/06/2018") date转换为 string结果是 "<=13/06/2018" (这里的日期是一个字符串而不是一个值)。

如果您转换 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 实际上存储序列值,但显示格式化字符串以供用户兼容。

结论
如果要比较日期,请始终比较它们的值而不是它们的字符串。

另见: How to use dates and times in Excel .

关于vba - 在 vba excel 中使用 COUNTIF 的 DATE 条件的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50830006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com