Si bien desde las funciones se puede calcular el último día del mes en Excel, también es posible requerir lo mismo en VBA, para ello vamos a crear una UDF (función definida por el usuario) que nos proporcione el número con correspondiente.
La función ULTIMODIA creada en VBA tiene objetivo de encontrar el número del último día del mes deseado, este comando devuelve un número. Esta función tiene dos argumentos: el número del mes (por ejemplo, enero es 1 y setiembre es 9) y el año, que debe ser un número positivo.
Sintaxis:
¿Cómo crear el código?
Primero, se debe evaluar si el año es bisiesto. Un año bisiesto es múltiplo de 4, múltiplo de 400, pero no múltiplo de 100. Entonces, se generará ese código y, luego, crearemos una variable dicotómica que nos ayudará las demás condiciones.
Segundo, se considera que hay meses que terminan en el día 30, otros en el día 31 y, el caso especial, febrero que dependerá de la condición del año (si es bisiesto o no). Entonces, se crea una estructura condicional en que la función mostrará el día según lo deseado por el usuario. Aquí se usará la variable dicotómica que se creó anteriormente para condicionar al mes de febrero.
Tercero, se debe validar los datos para que solo funcione sobre los doce meses que hay en un año, además, se impondrá una restricción que solo el comando se ejecute para números positivos (incluyendo el cero). Para que el usuario se dé cuenta de lo que se está equivocando, se le agregará un mensaje que especifico el error.
Finalmente, el código completo se puede descargar desde el siguiente enlace: Último día del mes en Excel VBA
Por: Juan Muchotrigo
11/09/2020 a las 4:11 pm
muy bueno pero por que falla si le pones febrero del 2100 en teoria deberia de cser 29 y no 28
2096 = 29
2104 = 29
pero 2100 = 28 no es real
11/04/2021 a las 10:45 am
bueno, en unos 80 años te empezará a fallar la macro entonces no hay problema
09/07/2021 a las 10:33 am
los años que son múltiplos de 100 no son bisiestos
09/07/2021 a las 12:41 pm
aclaración: Los años divisibles por 100 son bisiestos si y solo si son divisibles por 400. Se deben cumplir ambas condiciones
09/07/2021 a las 12:48 pm
No todos los años divisibles por 100 son bisiestos. Para que lo sean, debe cumplirse también que sean divisibles por 400
15/09/2020 a las 5:14 am
Gracias ya lo entendi
16/07/2021 a las 10:31 am
La función DateSerial y la función Day combinadas, nos dan una solución fácil para determinar el último dia del mes de un determinado año:
UltimoDiasDelMes=Day(DateSerial(year, month + 1, 0)).
Saludos
30/08/2022 a las 3:35 am
Quisiera agregar algo para que quede más claro mi posteo anterior.
Sub UltimoDia()
Dim fecha As Date
fecha = "15/02/2380"
UltimoDiaDelMes = Day(DateSerial(Year(fecha), Month(fecha) + 1, 0))
End Sub
La respuesta es 29
Saludos