Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

Último día del mes en Excel (VBA)

| 8 comentarios

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:

Último día del mes en Excel VBA

¿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.

Último día del mes en VBA

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.

Último día del mes UDF

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

8 comentarios

  1. 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

    • bueno, en unos 80 años te empezará a fallar la macro entonces no hay problema

      • los años que son múltiplos de 100 no son bisiestos

        • aclaración: Los años divisibles por 100 son bisiestos si y solo si son divisibles por 400. Se deben cumplir ambas condiciones

      • No todos los años divisibles por 100 son bisiestos. Para que lo sean, debe cumplirse también que sean divisibles por 400

  2. Gracias ya lo entendi

  3. 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

  4. 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

Deja una respuesta

Los campos requeridos estan marcados con *.