计算月末(Microsoft Excel)
Kim有一个工作表,在其中放置了开始日期(C列)和结束日期(D列)。她需要一种方法来计算两个日期之间的月末计数。例如,如果开始日期为1/1/17,结束日期为7/31/17,则月末数为7。但是,如果结束日期为7/30/17,则月数结束是6。
您可以设计任意数量的公式来计算正确的计数。最简单的公式是,如果您始终可以指望C列中的日期是一个月的开始。在这种情况下,以下公式将可以正常工作:
=DATEDIF(C1,D1+1,"m")
如果您不能指望C列包含一个月初的日期,但是可以指望总是在同一年的开始日期和结束日期,那么以下任何公式都可以解决问题:
=IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-MONTH(C1),MONTH(D1)-MONTH(C1)+1) =IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(EOMONTH(D1,0))-MONTH(EOMONTH(C1,0))+(EOMONTH(D1,0)=D1) =IF(EOMONTH(D1,0)=D1,MONTH(D1)-MONTH(C1)+1,MONTH(D1)-MONTH(C1)) =IF(D1<EOMONTH(D1,0),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(D1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0)
如果开始日期和结束日期的年份可能不同,则公式会更加复杂。以下任何一种变化都会计算出日期范围内的正确月末数:
=12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+INT(D1=EOMONTH(D1,0)) =12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+IF(EOMONTH(D1,0)=D1,1,0) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(D1=EOMONTH(D1,0)) =12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(DAY(D1+1)=1) =MONTH(D1)+12YEAR(D1)-MONTH(C1)-12YEAR(C1)+IF(EOMONTH(D1,0)=D1,1,0) =(MONTH(D1+1)+12YEAR(D1+1))-(MONTH(C1)+12YEAR(C1)) =IF(D1=EOMONTH(D1,0),1,0)+MONTH(D1)-MONTH(C1)+((YEAR(D1)-YEAR(C1))*12) =IF(EOMONTH(D1,0)=D1,(MONTH(D1)-MONTH(C1)+1)+(YEAR(D1)-YEAR(C1))12,MONTH(D1)-MONTH(C1)+(YEAR(D1)-YEAR(C1))12) =IF(D1=EOMONTH(D1,0),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m"),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m")-1) =IF(D1<C1,"Error",MONTH(D1)-MONTH(C1)+IF(D1MONTH(D1+1))*1) =IF(D1<C1,"Error",(YEAR(D1)-YEAR(C1))*12+(MONTH(D1)-MONTH(C1))+(EOMONTH(D1,0)=D1)) =SUM(N(FREQUENCY(EOMONTH(ROW(INDIRECT(C1&":"&D1)),0),EOMONTH(ROW(INDIRECT(C1&":"&D1)),0))>0))-(D1<EOMONTH(D1,0))
其中一些公式有些长,因此,如果您选择使用一个公式,则需要仔细观察所有公式。
如果您更喜欢使用宏方法,那么以下用户定义的函数可能是您感兴趣的:
Function CountMonthEnds(sd As Date, ed As Date) As Integer Dim ceom As Integer Dim cmonth As Integer Dim lmonth As Integer Dim x As Date cmonth = 0 ceom = 0 cmonth = Month(sd) lmonth = cmonth ' go to end date + 1 to allow for end date being end of month For x = sd To ed + 1 cmonth = Month(x) If cmonth <> lmonth Then ceom = ceom + 1 lmonth = cmonth End If Next x CountMonthEnds = ceom End Function
宏仅浏览开始日期和结束日期之间的所有日期。它查看每个日期的月份,如果更改,则将其视为“月末”。该计数由函数返回。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(572)适用于Microsoft Excel 2007、2010、2013和2016。