如何在Excel中将datestring转换为date

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

我想这个expression式返回FALSE,但它返回TRUE。

我知道我可以把我的date时间分解成date和时间,并将它们加在一起,如下所示:

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

但是,这对我来说似乎不够好看。 我想要一个简单的function或方法,看起来不错,我确信它在那里,但我无法find它。

我也知道有一个名为CDate的VBA函数可以将string转换为date时间,这将是完美的。 但是,我不明白如何在Excel单元格中调用VBA函数。

我将以下内容从评论升级到答案:

除非你有一个非常明确的理由(现在我想不出来),date(和其他值)实际上不应该像你显示的string一样在单元格中被“硬编码”。 硬编码这样的string,使其看不见,不灵活。 用户只会看到TRUEFALSE而没有指出这是什么意思。

我只是把你的date7/29/2011 12:58:00 PM在自己的单元格,例如A1,并将单元格的格式设置为某种date格式。 那么你可以说= A1 > NOW()

与@ jonsca和@Tiago Cardoso的答案相反,这个答案没有解决你的具体问题,但是再一次,你所问的对我来说似乎是非常糟糕的做法!

乘以一个string,比较函数将工作:

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

您的问题的答案与@ Jean-François的评论密切相关:为什么date被Excel解释为文本而不是date?

一旦你发现了,你就可以做比较。

如果这是因为string被作为文本检索,则可以简单地将其乘以1,然后比较函数就可以工作。 但它只适用于在区域设置中string格式是有效date/时间格式的情况。

您可以将VBA调用包装在自定义函数中:

 Function ReturnDate(ByVal datestr As String) As Date ReturnDate = CDate(datestr) End Function 

您可以像使用表格中的公式一样使用它。

最简单的方法是创build一个使用CDATE的VBA函数并返回您的比较结果。 然后,从Excel单元格中调用该函数。

VBAfunction

 Public Function compareDate(ByVal inputDate As String) As Boolean compareDate = CDate(inputDate) > Now() End Function 

然后在你的电子表格中,就这样做

 =compareDate("YOUR DATE") 

如果较旧,则函数将返回“FALSE”,如果它比Now()更新,则返回“TRUE”