años bisiestos con fórmulas y en VBA

¿Cuándo es un año bisiesto? la respuesta no es recordar los últimos juegos olímpicos, porque el ajuste es algo más fino.

En el calendario gregoriano, que es el que utilizamos, el bisiesto si el año el múltiplo de 4 (hasta aquí todo bien), salvo que sea múltiplo de 100, porque entonces no es bisiesto (¿cómo?) excepto que sea múltiplo de 400, que entonces sí es bisiesto.

entonces el año 2000 sí es bisiesto, pero el año 1900 y el 2010 no lo son.

¿y cómo ponemos esto con fórmulas de Excel?

El otro día me surgió la necesidad de averiguar si una fecha pertenecía a un año bisiesto o no.

Podríamos calcular los días entre el 1 de enero del año en cuestión y el 1 de enero del año siguiente, si son 366 será un año bisiesto ¿no? Excel se ocupa de lo demás.

Para conocer el año de una fecha, Excel ofrece la función AÑO, para componer una fecha a partir de día, mes y año, tenemos la función FECHA, así tendríamos una fórmula como la siguiente para ver cuántos días hay en el año

=FECHA(año_referencia+1;1;1)-FECHA(año_referencia;1;1)

También podemos hacer una función que calcule directamente con las condiciones de si es divisible por 4. En este caso la fórmula quedaría algo así (Devuelve verdadero si es bisiesto y falso si no lo es):

=SI(RESIDUO(año_referencia;400)=0;VERDADERO;SI(RESIDUO(año_referencia;100)=0;FALSO;SI(RESIDUO(año_referencia;4)=0;VERDADERO;FALSO)))

¿y en VBA?

Pero nos puede interesar también calcular si es un año bisiesto mediante visual basic, creando una función personalizada que nos diga si un año es o no bisiesto.

En este artículo he encontrado un pseudocódigo que explica qué hay que hacer, su conversión a VBA sería algo así:

Function esbisiesto(año As Integer) As Boolean
    If año Mod 400 = 0 Then
        esbisiesto = True
    ElseIf año Mod 100 = 0 Then
        esbisiesto = False
    ElseIf año Mod 4 = 0 Then
        esbisiesto = True
    Else
        esbisiesto = False
    End If
End Function
 

¿necesitas más?...

 

Temática: