Explicación del código VBA para el calendario.

Última actualización el 17/08/2025
Tiempo de leer: 3 minutos

Este artículo desglosará cada línea de código VBA utilizada para ocultar columnas en el calendario automático.

Si desea crear un calendario que registre datos de varios meses, explore los recursos adicionales en este articulo.

Recordar el código VBA para ocultar los últimos días en el calendario

Línea 1: Creación del nombre de la subrutina

En cualquier programa VBA, todo el código está escrito dentro de subrutinas (Sub). Cada subrutina debe tener un nombre único en el proyecto.

Este nombre se utilizará en el proyecto de calendario para vincular el código con la lista desplegable.

Línea 2: declarar la variable

  • Para evaluar el valor del día en las diferentes columnas, debemos crear una variable para leer el índice de cada columna (1, 2, 3,...).
  • La variable Num_Col se declara (Dim) como un Número Entero (As Long)
  • Porque el índice de columna de Excel nunca se expresa con un decimal

Línea 3: comienzo del bucle

Ahora vamos a crear un bucle para extender la variable. Num_Col desde 30 hasta 32.

La razón por la que comenzamos nuestro ciclo en el valor 30 es porque para cualquier mes, los días 29, 30 y 31 estarán siempre en las columnas 30, 31 y 32.

Las columnas 30, 31 y 32 del VBA en el calendario.

Línea 4: Prueba entre el mes calculado en las celdas y el mes seleccionado

Aquí está el truco del programa. 😉😎

¿Cómo calcula Excel la fecha?

Como sabes, todos los meses tienen 28 días. Pero febrero podría tener 29 días cada 4 años y 4 meses tienen 30 días (abril, junio, septiembre, noviembre).

Parece complejo crear un test para cada caso. Por otro lado, Excel calcula con precisión una fecha incluso si el número de días a sumar se extiende hasta el final del mes.

Por ejemplo, si sumamos 30 días a la parte superior 1 de febrero de 2019, Excel devolverá la fecha del 3rd de marzo 2019.

=FECHA(2019;2;1)+30 => 03/03/2019

Fechas calculadas cuando se selecciona febrero.

Cómo codificar una celda en VBA

En VBA, para leer el contenido de una celda, sólo hay que escribir Cells(index row, index column). Entonces, para A1, escribirás Cells(1, 1) y para la celda AD6 con el día 29, el código es Cells(6, 30)

Pero también puedes sustituir uno de los argumentos de Cells por una variable como esta Cells(6, Num_Col)

Construcción de la prueba.

Volvamos al calendario de febrero de 2019. Las columnas 30, 31 y 32 tendrán fechas de marzo (y no de febrero) debido a la regla explicada en la fórmula anterior.

Entonces, escribiremos una prueba entre el mes (devuelta por la función VBA Month) de las columnas 30, 31 y 32 y el valor devuelto por el menú desplegable para el mes.

El resultado regresa mediante el menú desplegable. Este valor se utilizará en el código VBA del mes calendario.

Entonces, la prueba verificará si el mes en las celdas AD6, AE6 y AF6 (o Cells(6, 30), Cells(6, 31) et Cells(6,32)) es mayor o igual a A1 (la celda vinculada al menú desplegable del mes). Pero no necesitamos probar las 3 columnas, la variable lo hará por nosotros 😀

Línea 5: Ocultar las columnas del calendario en VBA

Si la prueba es verdadera, la columna Num_Col Está oculto (Hidden = True).

Líneas 6 y 7: Mostrar la columna

De lo contrario (Else), lo que significa que la prueba es Falsa, entonces la columna Num_Col no está oculto (Hidden = False)

Esta prueba parece extraña, pero en este caso, el mes seleccionado tiene 31 días y desea poder mostrar la columna anterior oculta (¡qué inteligente 😉!)

Líneas 8 y 9: Cerrar las instrucciones

En VBA, al crear una prueba, se debe indicar cuándo finaliza. Lo mismo ocurre con un bucle.

Al final de la prueba If is End If, y el bucle For, debes escribir la instrucción Next

Línea 10: Borrar los datos

Después del bucle en las 3 columnas, el programa borrará el contenido del rango B6 a AF13 Range("B6:AF13") con la instrucción ClearContents

Línea 11: Fin de la subrutina

Precisamente para indicar el final de una prueba o de un bucle, debes indicar que tu subrutina ha finalizado con la instrucción.

20 Comentarios

  1. Karla
    22/02/2023 a las 16:41

    ¿Cómo puedo hacer para que los datos queden para cada mes?

    Responder

    • Frédéric LE GUEN
      18/03/2023 a las 08:33

      Pronto publicaré un libro de trabajo con esta funcionalidad.

      Responder

  2. Karla
    22/02/2023 a las 16:39

    ¡Gran explicación! ¿Cómo puedo hacer que los datos se mantengan cada mes?

    ¡Gracias!

    Responder

  3. Koko Vidallo
    24/01/2023 a las 14:02

    Cómo dejar el contenido en la tabla. El contenido no permanece cuando cambio los meses. ¿Puedo saber cuál debería ser el comando para diferentes contenidos por mes?

    Responder

  4. Samuel Wagh
    08/01/2023 a las 16:18

    Señor, muy buenos métodos de enseñanza ods, por favor introduzca el código vba.

    Responder

  5. Melinda
    06/12/2022 a las 22:36

    Me acabo de topar con esto y es sorprendente lo que he aprendido. Gracias.

    Pero al revisar otros comentarios, ¿hay alguna forma de esa pieza final (almacenar los datos ingresados ​​en el calendario de mes a mes?

    Responder

    • Frédéric LE GUEN
      16/12/2022 a las 10:25

      Pronto 😉

      Responder

  6. Eddy Tuytschaever
    06/10/2022 a las 11:48

    la fórmula es incorrecta, debería ser If Month(Cells(6, Num_Kol)) > Cells(1, 1) Then
    en lugar de If Month(Cells(6, Num_Kol)) > =Cells(1, 1) Then

    Responder

  7. Wesley
    04/02/2022 a las 19:04

    Es un error de conversión de HTML... cambie la línea a esta:

    Si Mes (Celdas (6, Num_Col)) > Celdas (1, 1) Entonces

    Responder

  8. Andrew
    26/01/2022 a las 12:32

    De hecho tengo el mismo problema. Si selecciono "febrero" los días visualizados son 28, pero luego, si elijo otro mes, digamos "enero", los días visualizados siguen siendo 28 y no 31.
    ¿Hay alguna forma de solucionar este problema?

    Gracias

    Responder

  9. Jennifer Campos
    23/12/2021 a las 16:11

    Hola, necesito realizar un seguimiento de los días de vacaciones en este calendario. ¿Puedes decirme cómo ajustar el código para que mantenga los días marcados como vacaciones o no y no los borre? gracias

    Responder

  10. Juan
    05/10/2021 a las 22:36

    ¡Hola señor!

    El código no funciona. ¿Cómo puedo solucionarlo?

    Sub Hide_Day()
    Dim Num_Col mientras
    'Esta instrucción limpia el contenido de las celdas de tu calendario.
    Rango("B7:AF13").Borrar contenido
    Para Num_Col = 30 a 32
    'Prueba si el mes de las celdas (fila 6) es el mismo que el mes seleccionado (celda A1 o celdas(1,1))
    Si Mes(Celdas(6, Num_Col)) >= Celdas(1, 1) Entonces
    Columnas (Num_Col). Ocultas = Verdadero
    otro
    Columnas(Num_Col).Ocultas = Falso
    Si terminar
    Siguiente
    End Sub

    Responder

    • James
      16/11/2021 a las 19:35

      Sub Hide_Day()
      Dim Num_Col mientras
      'Esta instrucción limpia el contenido de las celdas de tu calendario.
      Rango("B7:AF13").Borrar contenido
      Para Num_Col = 30 a 32
      'Prueba si el mes de las celdas (fila 6) es el mismo que el mes seleccionado (celda A1 o celdas(1,1))

      Si mes (celdas (6, Num_Col)) celdas (1, 1) entonces
      Columnas (Num_Col). Ocultas = Verdadero
      otro
      Columnas(Num_Col).Ocultas = Falso
      Si terminar
      Siguiente
      End Sub

      Responder

    • James
      16/11/2021 a las 19:40

      Al sitio le falta el signo no igual en el código intermedio.
      Si Mes (Celdas (6, Num_Col)) signo igual Celdas (1, 1) Entonces

      Responder

      • Frédéric LE GUEN
        17/11/2021 a las 18:42

        Gracias, lo reviso

  11. Randhirsingh
    28/01/2021 a las 18:05

    Excelente señor, ¿puedo hacer esto en la hoja de Google, por favor?

    Responder

    • Frédéric LE GUEN
      28/01/2021 a las 18:15

      VBA no está disponible con Google Sheet. Sólo para Excel

      Responder

  12. haris awan
    16/11/2020 a las 21:28

    ¡Hola señor!
    Tengo una pregunta sobre la fórmula VBA para ocultar columnas. ¿Podrías ayudarme amablemente?

    Responder

    • Frédéric LE GUEN
      16/11/2020 a las 21:47

      He agregado un enlace para la explicación del código. Esto te ayudará a personalizar tu proyecto.

      Responder

      • Jack
        01/12/2021 a las 11:16

        Para mí, parece que oculta las columnas 30-32 independientemente del día en que uso esta fórmula. (calendario hecho igual que su guía)
        Parece que verifica febrero y permanece allí, ¿alguna forma de evitarlo?

Deje un comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

Explicación del código VBA para el calendario.

Tiempo de leer: 3 minutos
Última actualización el 17/08/2025

Este artículo desglosará cada línea de código VBA utilizada para ocultar columnas en el calendario automático.

Si desea crear un calendario que registre datos de varios meses, explore los recursos adicionales en este articulo.

Recordar el código VBA para ocultar los últimos días en el calendario

Línea 1: Creación del nombre de la subrutina

En cualquier programa VBA, todo el código está escrito dentro de subrutinas (Sub). Cada subrutina debe tener un nombre único en el proyecto.

Este nombre se utilizará en el proyecto de calendario para vincular el código con la lista desplegable.

Línea 2: declarar la variable

  • Para evaluar el valor del día en las diferentes columnas, debemos crear una variable para leer el índice de cada columna (1, 2, 3,...).
  • La variable Num_Col se declara (Dim) como un Número Entero (As Long)
  • Porque el índice de columna de Excel nunca se expresa con un decimal

Línea 3: comienzo del bucle

Ahora vamos a crear un bucle para extender la variable. Num_Col desde 30 hasta 32.

La razón por la que comenzamos nuestro ciclo en el valor 30 es porque para cualquier mes, los días 29, 30 y 31 estarán siempre en las columnas 30, 31 y 32.

Las columnas 30, 31 y 32 del VBA en el calendario.

Línea 4: Prueba entre el mes calculado en las celdas y el mes seleccionado

Aquí está el truco del programa. 😉😎

¿Cómo calcula Excel la fecha?

Como sabes, todos los meses tienen 28 días. Pero febrero podría tener 29 días cada 4 años y 4 meses tienen 30 días (abril, junio, septiembre, noviembre).

Parece complejo crear un test para cada caso. Por otro lado, Excel calcula con precisión una fecha incluso si el número de días a sumar se extiende hasta el final del mes.

Por ejemplo, si sumamos 30 días a la parte superior 1 de febrero de 2019, Excel devolverá la fecha del 3rd de marzo 2019.

=FECHA(2019;2;1)+30 => 03/03/2019

Fechas calculadas cuando se selecciona febrero.

Cómo codificar una celda en VBA

En VBA, para leer el contenido de una celda, sólo hay que escribir Cells(index row, index column). Entonces, para A1, escribirás Cells(1, 1) y para la celda AD6 con el día 29, el código es Cells(6, 30)

Pero también puedes sustituir uno de los argumentos de Cells por una variable como esta Cells(6, Num_Col)

Construcción de la prueba.

Volvamos al calendario de febrero de 2019. Las columnas 30, 31 y 32 tendrán fechas de marzo (y no de febrero) debido a la regla explicada en la fórmula anterior.

Entonces, escribiremos una prueba entre el mes (devuelta por la función VBA Month) de las columnas 30, 31 y 32 y el valor devuelto por el menú desplegable para el mes.

El resultado regresa mediante el menú desplegable. Este valor se utilizará en el código VBA del mes calendario.

Entonces, la prueba verificará si el mes en las celdas AD6, AE6 y AF6 (o Cells(6, 30), Cells(6, 31) et Cells(6,32)) es mayor o igual a A1 (la celda vinculada al menú desplegable del mes). Pero no necesitamos probar las 3 columnas, la variable lo hará por nosotros 😀

Línea 5: Ocultar las columnas del calendario en VBA

Si la prueba es verdadera, la columna Num_Col Está oculto (Hidden = True).

Líneas 6 y 7: Mostrar la columna

De lo contrario (Else), lo que significa que la prueba es Falsa, entonces la columna Num_Col no está oculto (Hidden = False)

Esta prueba parece extraña, pero en este caso, el mes seleccionado tiene 31 días y desea poder mostrar la columna anterior oculta (¡qué inteligente 😉!)

Líneas 8 y 9: Cerrar las instrucciones

En VBA, al crear una prueba, se debe indicar cuándo finaliza. Lo mismo ocurre con un bucle.

Al final de la prueba If is End If, y el bucle For, debes escribir la instrucción Next

Línea 10: Borrar los datos

Después del bucle en las 3 columnas, el programa borrará el contenido del rango B6 a AF13 Range("B6:AF13") con la instrucción ClearContents

Línea 11: Fin de la subrutina

Precisamente para indicar el final de una prueba o de un bucle, debes indicar que tu subrutina ha finalizado con la instrucción.

20 Comentarios

  1. Karla
    22/02/2023 a las 16:41

    ¿Cómo puedo hacer para que los datos queden para cada mes?

    Responder

    • Frédéric LE GUEN
      18/03/2023 a las 08:33

      Pronto publicaré un libro de trabajo con esta funcionalidad.

      Responder

  2. Karla
    22/02/2023 a las 16:39

    ¡Gran explicación! ¿Cómo puedo hacer que los datos se mantengan cada mes?

    ¡Gracias!

    Responder

  3. Koko Vidallo
    24/01/2023 a las 14:02

    Cómo dejar el contenido en la tabla. El contenido no permanece cuando cambio los meses. ¿Puedo saber cuál debería ser el comando para diferentes contenidos por mes?

    Responder

  4. Samuel Wagh
    08/01/2023 a las 16:18

    Señor, muy buenos métodos de enseñanza ods, por favor introduzca el código vba.

    Responder

  5. Melinda
    06/12/2022 a las 22:36

    Me acabo de topar con esto y es sorprendente lo que he aprendido. Gracias.

    Pero al revisar otros comentarios, ¿hay alguna forma de esa pieza final (almacenar los datos ingresados ​​en el calendario de mes a mes?

    Responder

    • Frédéric LE GUEN
      16/12/2022 a las 10:25

      Pronto 😉

      Responder

  6. Eddy Tuytschaever
    06/10/2022 a las 11:48

    la fórmula es incorrecta, debería ser If Month(Cells(6, Num_Kol)) > Cells(1, 1) Then
    en lugar de If Month(Cells(6, Num_Kol)) > =Cells(1, 1) Then

    Responder

  7. Wesley
    04/02/2022 a las 19:04

    Es un error de conversión de HTML... cambie la línea a esta:

    Si Mes (Celdas (6, Num_Col)) > Celdas (1, 1) Entonces

    Responder

  8. Andrew
    26/01/2022 a las 12:32

    De hecho tengo el mismo problema. Si selecciono "febrero" los días visualizados son 28, pero luego, si elijo otro mes, digamos "enero", los días visualizados siguen siendo 28 y no 31.
    ¿Hay alguna forma de solucionar este problema?

    Gracias

    Responder

  9. Jennifer Campos
    23/12/2021 a las 16:11

    Hola, necesito realizar un seguimiento de los días de vacaciones en este calendario. ¿Puedes decirme cómo ajustar el código para que mantenga los días marcados como vacaciones o no y no los borre? gracias

    Responder

  10. Juan
    05/10/2021 a las 22:36

    ¡Hola señor!

    El código no funciona. ¿Cómo puedo solucionarlo?

    Sub Hide_Day()
    Dim Num_Col mientras
    'Esta instrucción limpia el contenido de las celdas de tu calendario.
    Rango("B7:AF13").Borrar contenido
    Para Num_Col = 30 a 32
    'Prueba si el mes de las celdas (fila 6) es el mismo que el mes seleccionado (celda A1 o celdas(1,1))
    Si Mes(Celdas(6, Num_Col)) >= Celdas(1, 1) Entonces
    Columnas (Num_Col). Ocultas = Verdadero
    otro
    Columnas(Num_Col).Ocultas = Falso
    Si terminar
    Siguiente
    End Sub

    Responder

    • James
      16/11/2021 a las 19:35

      Sub Hide_Day()
      Dim Num_Col mientras
      'Esta instrucción limpia el contenido de las celdas de tu calendario.
      Rango("B7:AF13").Borrar contenido
      Para Num_Col = 30 a 32
      'Prueba si el mes de las celdas (fila 6) es el mismo que el mes seleccionado (celda A1 o celdas(1,1))

      Si mes (celdas (6, Num_Col)) celdas (1, 1) entonces
      Columnas (Num_Col). Ocultas = Verdadero
      otro
      Columnas(Num_Col).Ocultas = Falso
      Si terminar
      Siguiente
      End Sub

      Responder

    • James
      16/11/2021 a las 19:40

      Al sitio le falta el signo no igual en el código intermedio.
      Si Mes (Celdas (6, Num_Col)) signo igual Celdas (1, 1) Entonces

      Responder

      • Frédéric LE GUEN
        17/11/2021 a las 18:42

        Gracias, lo reviso

  11. Randhirsingh
    28/01/2021 a las 18:05

    Excelente señor, ¿puedo hacer esto en la hoja de Google, por favor?

    Responder

    • Frédéric LE GUEN
      28/01/2021 a las 18:15

      VBA no está disponible con Google Sheet. Sólo para Excel

      Responder

  12. haris awan
    16/11/2020 a las 21:28

    ¡Hola señor!
    Tengo una pregunta sobre la fórmula VBA para ocultar columnas. ¿Podrías ayudarme amablemente?

    Responder

    • Frédéric LE GUEN
      16/11/2020 a las 21:47

      He agregado un enlace para la explicación del código. Esto te ayudará a personalizar tu proyecto.

      Responder

      • Jack
        01/12/2021 a las 11:16

        Para mí, parece que oculta las columnas 30-32 independientemente del día en que uso esta fórmula. (calendario hecho igual que su guía)
        Parece que verifica febrero y permanece allí, ¿alguna forma de evitarlo?

Deje un comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *