两个日期之间的月数

时间:2014-05-19 18:39:07

标签: excel vba date excel-vba excel-formula

我正在尝试创建一个公式或VBA函数,根据此规则计算两个日期之间的月数:如果开始日期是该月的15日或之前,或结束日期是在15日之后那个月,然后那个月很重要。

例如:

Start Date   End Date   Output
----------   ---------  --------
1/5/2014     2/16/2014  2 months
1/17/2014    2/16/2014  1 month
1/16/2014    2/5/2014   0 months

我已经尝试=DATEDIF(A2, B2, "M") + IF( DATEDIF(A2, B2, "MD")>=15, 1, 0)但如果两个日期的天数之间的距离超过15,则只会增加一个月。例如,如果开始日期为5/14 / 13-8 / 16/13,会说这些日期之间有3个月的时间。但是,根据我在上面指定的条件,这两个日期之间的实际距离应为4个月。

我能解决这个问题?

2 个答案:

答案 0 :(得分:1)

编辑:帐户多年...

=( (YEAR(B1)*12+MONTH(B1)) - (YEAR(A1)*12+MONTH(A1)) )    
           + ( IF(DAY(A1)<=15,1,0)+IF(DAY(B1)>15,1,0) ) 

答案 1 :(得分:1)

这也是一个vba解决方案

Function date_diff_to_months(date1 As Date, date2 As Date)


   Dim y1 As Integer
   Dim y2 As Integer
   Dim d1 As Integer
   Dim d2 As Integer
   Dim m1 As Integer
   Dim m2 As Integer
   Dim m_diff As Integer
   Dim y_diff As Integer
   Dim month_adjustment As Integer

   y1 = Year(date1)
   y2 = Year(date2)
   m1 = Month(date1)
   m2 = Month(date2)
   d1 = Day(date1)
   d2 = Day(date2)

   m_diff = m2 - m1
   y_diff = (y2 - y1) * 12

   If (m_diff > 0 Or y_diff > 0) Then
       If (d1 <= 15 And d2 >= 15) Then
          month_adjustment = 1
       ElseIf (d1 >= 15 And d2 <= 15) Then
          month_adjustment = -1
       End If
   End If

   date_diff_to_months = m_diff + y_diff + month_adjustment
End Function