我有一张工作表,其中包含开始日期和结束日期。我需要获得这些日期之间的月数。我使用公式=MONTH(B1)-MONTH(A1)
来获得#。但是,当我的日期跨越多年时,此公式失败 - 如果开始日期是2014年1月1日,结束日期是2015年1月1日,那么它返回" 1",当我喜欢得到一个" 12"。
然后我尝试DATEDIF(A1,B1,"m")
来获取日期之间的月份数,这是有效的。但是,我的问题可以通过以下示例进行总结:
开始日期:2014年1月5日
结束日期:2014年3月1日
" MonthDif": 2
DateDif: 1
开始日期:2014年1月5日
结束日期:2014年3月3日
" MonthDif": 2
DateDif: 2
正如您所看到的,DATEDIF
函数返回完整个月的数量,而我的month - month
函数返回月份数"占用数量"根据开始日期和结束日期之间的差异,无论它们是否完整。
我需要在任何日期期间的月数,无论是否整整几个月!基本上,我需要MONTH(B1)-MONTH(A1)
返回的确切内容,除非它可以工作多年。
另外,我正在考虑设计一个自定义VBA功能来实现上述目标。如果有人在那里有任何建议。
答案 0 :(得分:5)
如果您使用DATEDIF
,但始终从第一个月的第一天算起,那么您将获得所需内容,例如如果您使用的=A1-DAY(A1)+1
将为您提供A1月的第一个,那么请在DATEDIF
这样使用
=DATEDIF(A1-DAY(A1)+1,B1,"m")
答案 1 :(得分:2)
假设B1包含您的结束日期,A1包含您的开始日期,
=IF(DAY(B1)>=DAY(A1),0,-1)+(YEAR(B1)-YEAR(A1))
*12+MONTH(B1)-MONTH(A1)
答案 2 :(得分:0)
我确切地需要
MONTH(B1)-MONTH(A1)
返回的内容,除非它可以使用多年。
好吧,好吧,有可能说明显而易见的事情:
=MONTH(B1)-MONTH(A1) + 12*(YEAR(B1)-YEAR(A1))
理由:一年由十二个月组成。