如何在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,使其看不见,不灵活。 用户只会看到TRUE
或FALSE
而没有指出这是什么意思。
我只是把你的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”