我有一个日期的单元格:
30/04/1991
我需要与今天的日期进行比较,但是与该单元格的日期和月份相比,但是与当前年份相比较。但它不起作用。
我有以下内容:
MsgBox Format(Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(Now), "dd/mm/yyyy") < Format(Now, "dd/mm/yyyy")
结果是&#34; 30/04/2017&lt; 1月5日/ 2017&#34; 但是msgbox结果是&#34; False&#34;。这是错的,今天的日期是&#34; 01/05 / 2017&#34;
我做错了什么?
答案 0 :(得分:2)
为避免2月29日出现问题,您只需比较月份和日期:
MsgBox Format(cell, "mmdd") < Format(Now, "mmdd")
<强>更新强>
DatePart("y", Date)
可用于获取一年中的一天:
MsgBox DatePart("y", cell) < DatePart("y", Now)
Debug.Print DatePart("y", "2 28") // 59
Debug.Print DatePart("y", "2 29 16") // 60
答案 1 :(得分:1)
我建议使用DateDiff
功能。
您可以使用Date
代替Now
,因为您只需要日期,而不是时间。
如果您使用DateDiff
,则可以将2个值保留为Date
变量,而不是将DateValue
与&
和"/"
一起使用,有一个更短更清洁的版本DateSerial(Year(Date), Month(cell.Value), Day(cell.Value))
。
<强>代码强>:
MsgBox DateDiff("d", DateSerial(Year(Date), Month(cell.Value), Day(cell.Value)), Date) > 1
如果您还想获得这两个日期之间的天数:
MsgBox DateDiff("d", DateSerial(Year(Date), Month(cell.Value), Day(cell.Value)), Date)
答案 2 :(得分:0)
我自己解决了
MsgBox DateValue(Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(Now)) < DateValue(Date)