如何将日期字符串转换并与Excel中的日期进行比较

时间:2011-07-29 17:53:52

标签: excel excel-vba vba

= "7/29/2011 12:58:00 PM" > NOW()

我希望这个表达式返回FALSE但它返回TRUE。

我知道我可以将日期时间拆分为日期和时间,并按如下方式将它们加在一起:

= DateValue("7/29/2011") + TimeValue("12:58:00 PM") > NOW()

但是,这对我来说似乎不优雅。我想要一个看起来不错的简单功能或方法,我确信它在那里,但我找不到它。

我也知道有一个名为CDate的VBA函数可以将字符串强制转换为日期时间,这将是完美的。但是,我没有看到如何在excel单元格中调用VBA函数。

4 个答案:

答案 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)

我正在将评论中的以下内容升级为答案:

除非你有一个非常具体的理由这样做(现在我想不出任何),日期(和其他值)实际上不应该像单元格那样在单元格中“硬编码”。对字符串进行硬编码会使其变得不可见且不灵活。用户只会看到TRUEFALSE,但不知道这意味着什么。

我只想将你的日期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”