返回月份差异的Excel函数?

时间:2014-11-18 19:05:22

标签: excel vba function

我有一张工作表,其中包含开始日期和结束日期。我需要获得这些日期之间的月数。我使用公式=MONTH(B1)-MONTH(A1)来获得#。但是,当我的日期跨越多年时,此公式失败 - 如果开始日期是2014年1月1日,结束日期是2015年1月1日,那么它返回" 1",当我喜欢得到一个" 12"。

然后我尝试DATEDIF(A1,B1,"m")来获取日期之间的月份数,这是有效的。但是,我的问题可以通过以下示例进行总结:

情况1:

  

开始日期:2014年1月5日

     

结束日期:2014年3月1日

     

" MonthDif": 2

     

DateDif: 1

情况2:

  

开始日期:2014年1月5日

     

结束日期:2014年3月3日

     

" MonthDif": 2

     

DateDif: 2

正如您所看到的,DATEDIF函数返回完整个月的数量,而我的month - month函数返回月份数"占用数量"根据开始日期和结束日期之间的差异,无论它们是否完整。

我需要在任何日期期间的月数,无论是否整整几个月!基本上,我需要MONTH(B1)-MONTH(A1)返回的确切内容,除非它可以工作多年。

另外,我正在考虑设计一个自定义VBA功能来实现上述目标。如果有人在那里有任何建议。

3 个答案:

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

理由:一年由十二个月组成。