Kim tiene una hoja de trabajo en la que coloca una fecha de inicio (columna C) y una fecha de finalización (columna D). Necesita una forma de calcular la cuenta de fines de mes entre las dos fechas. Por ejemplo, si la fecha de inicio es el 1/1/17 y la fecha de finalización es el 31/7/17, el número de finalizaciones del mes es 7. Sin embargo, si la fecha final es el 30/7/17, el número de meses termina es 6.

Hay muchas fórmulas que podría idear para calcular el recuento adecuado. La fórmula más simple es si siempre puede contar con la fecha de la columna C como el comienzo de un mes. En ese caso, la siguiente fórmula funcionará bien:

=DATEDIF(C1,D1+1,"m")

Si no puede contar con que la columna C contenga una fecha que sea el comienzo de un mes, pero puede contar con que las fechas de comienzo y finalización siempre sean del mismo año, entonces cualquiera de las siguientes fórmulas funcionará:

=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)

Si los años en las fechas de inicio y finalización pueden ser diferentes, entonces las fórmulas son un poco más complejas. Cualquiera de las siguientes variaciones calculará el número correcto de fines de mes en el rango de fechas:

=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))

Algunas de estas fórmulas son un poco largas, por lo que querrá vigilar cuidadosamente que las obtenga todas si elige usar una.

Si prefiere utilizar un enfoque macro, entonces la siguiente función definida por el usuario puede ser de interés:

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

La macro simplemente recorre todas las fechas entre las fechas de inicio y finalización. Observa el mes de cada una de las fechas y, si cambia, lo cuenta como un «fin de mes». Este recuento es devuelto por la función.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (572) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.