= "7/29/2011 12:58:00 PM" > NOW()
我希望这个表达式返回FALSE但它返回TRUE。
我知道我可以将日期时间拆分为日期和时间,并按如下方式将它们加在一起:
= DateValue("7/29/2011") + TimeValue("12:58:00 PM") > NOW()
但是,这对我来说似乎不优雅。我想要一个看起来不错的简单功能或方法,我确信它在那里,但我找不到它。
我也知道有一个名为CDate
的VBA函数可以将字符串强制转换为日期时间,这将是完美的。但是,我没有看到如何在excel单元格中调用VBA函数。
答案 0 :(得分:7)
将字符串乘以1,比较函数将起作用:
= 1*"7/29/2011 12:58:00 PM" > NOW()
你的问题的答案与@ Jean-François的评论密切相关:为什么日期被Excel解释为文本而不是日期?
一旦找到它,你就可以进行比较。
如果那是因为字符串是作为文本检索的,你可以简单地将它乘以1,然后比较函数就可以了。但它仅适用于字符串格式是区域设置中的有效日期/时间格式的情况。
答案 1 :(得分:5)
您可以将VBA调用包装在自定义函数中:
Function ReturnDate(ByVal datestr As String) As Date
ReturnDate = CDate(datestr)
End Function
您可以像工作表中的公式一样使用。
答案 2 :(得分:4)
我正在将评论中的以下内容升级为答案:
除非你有一个非常具体的理由这样做(现在我想不出任何),日期(和其他值)实际上不应该像单元格那样在单元格中“硬编码”。对字符串进行硬编码会使其变得不可见且不灵活。用户只会看到TRUE
或FALSE
,但不知道这意味着什么。
我只想将你的日期7/29/2011 12:58:00 PM
放在一个单元格中,例如A1,并将单元格的格式设置为某种日期格式。然后你可以说= A1 > NOW()
。
与@ jonsca和@Tiago Cardoso的答案相反,这个答案并没有解决你的具体问题,但话说回来,你所问的对我来说似乎真的很糟糕!
答案 3 :(得分:3)
最简单的方法是创建一个使用CDATE的VBA函数并返回您的比较。然后,从excel单元调用该函数。
VBA功能
Public Function compareDate(ByVal inputDate As String) As Boolean
compareDate = CDate(inputDate) > Now()
End Function
然后在电子表格中,执行
=compareDate("YOUR DATE")
如果该函数较旧则返回“FALSE”,如果它比Now()
更新则返回“TRUE”