Traducir el blog

Calendario en Google Sheets con una Tabla Dinámica

Posted on enero 04, 2021 by Excel Pedro Wave

Ante todo ¡¡¡ FELIZ AÑO NUEVO 2021 !!!

Mis deseos para el año que comienza es que sólo nos pasen cosas buenas y que olvidemos pronto el aciago 2020.

Mi primer propósito de Año Nuevo es dedicar esta entrada del blog al buen saber hacer de Google, del que debería aprender Microsoft, por lo que no contiene una plantilla Excel, como es habitual en este blog, sino una plantilla Google Sheets que he compartido en el siguiente enlace, y que podrás copiar y editar con una cuenta de Google:

Calendario Dinámico Google Sheets PW1


Actualización 2021-08-29: El comentario de una desconocida me ha llevado a publicar una 2ª versión de este calendario en la que se puede definir el mes de inicio del calendario y mostrar los 12 meses siguientes, cambiando de año si hace falta. Por ejemplo, para convertirlo en un calendario de uso escolar como solicita una desconocida en un comentario. Es decir, que empiece en septiembre de 2021 y muestre hasta agosto de 2022. Ver el siguiente enlace:

Calendario Dinámico Google Sheets PW2


La voz del usuario de Excel

Excel UserVoice es el foro de Microsoft para que los usuarios de Excel, como tú y como yo, puedan tener voz y comentar sugerencias y votarlas para que Microsoft mejore su herramienta estrella: ¡¡¡ Excel !!!. Si no lo sabías, ¡ya lo sabes!

Una de las mejores sugerencias que he votado y comentado, y que sugiero que hagas lo mismo para que Microsoft nos haga caso cuanto antes -ASAP-, es poder usar fechas con número de serie negativo en las celdas, para que 1900 no sea el primer año que se puede usar en las celdas y funciones de Excel. Accede a esta excelente sugerencia desde este enlace:

Microsoft Excel UserVoice: Dates prior to 1900

La sugerencia lleva publicada desde el 27 de septiembre de 2015. En 5 años Microsoft Excel no ha dicho ni pío, cuando la competencia de Google Sheets y LibreOffice Calc funcionan perfectamente con todos los años del Calendario Gregoriano.

Actualización 2022-06-06: Esa página provoca el Error 404: Page Not Found.

Microsoft ha borrado intencionadamente UserVoice, y ha desaparecido todo el historial de sugerencias enviadas por los usuarios de Office, con lo que se han perdido todos los votos de los últimos años.

Desde hace 7 meses Microsoft ha creado un nuevo portal de Feedback (en inglés), donde compartir comentarios y ayudar a hacer mejoras y crear nuevos productos, con lo que he vuelto a escribir un comentario y votar por esta sugerencia:

Dealing with dates before 1900 · Community (microsoft.com)


Fechas en las hojas de cálculo de Google

Para demostrar que la competencia de Microsoft Excel está más avanzada, he diseñado un calendario basado en una tabla dinámica en Google Sheets, con la misma idea que publiqué en el siguiente artículo:

Calendario en Excel con una tabla dinámica

Ese calendario en Excel comienza a propósito el día 1 de enero de 1901, fecha de inicio del Siglo XX, ya que está demostrado que los meses de enero y febrero de 1900 son calculados erróneamente, pues Excel supone incorrectamente que el año 1900 es un año bisiesto, y ya hemos dicho que tampoco es capaz de calcular fechas previas al año 1900.

Las hojas de cálculo de Google trabajan con números de serie negativos desde el año 100 ¡nada menos!

Excel obliga a programar en lenguaje VBA las fechas anteriores a 1900, como he comentado en el siguiente artículo de este blog:

Calendario Perpetuo desde antes de 1900


Calendario en Google Sheets con una tabla dinámica

En esta imagen muestro el aspecto del calendario en Google Sheets, hecho con una tabla dinámica que hace de calendario, y con una tabla de fechas de eventos, por ejemplo de días festivos: 


Como verás, he ocultado la esencial columna C, con el número de la semana (imprescindible como fila de la tabla dinámica), para dar más visibilidad al calendario. Como comprenderás, no hay ningún problema en mostrarla.

Se puede generar un calendario gregoriano editando la celda B2 desde el año 100, cosa que no es muy rigurosa pues el Calendario Gregoriano se impuso a partir del año 1582, y hasta el año 9999.

Si el mes de la celda G2 se deja en blanco, el calendario será de todos los meses. Si se elige un mes, solamente se mostrará ese mes.

La hoja 'Fechas' contiene 3 tablas, dos son auxiliares para los 7 días de la semana y los 12 meses del año, y la otra es el origen de datos de la tabla dinámica con la que se genera este calendario.

La tabla de fechas contiene 366 filas para contemplar todos los días de una año completo, incluidos los años bisiestos, con 5 campos:

  • Fecha: Son 366 días en la columna A: Primer día del año en la celda A2 con la fórmula:
    • =FECHANUMERO(Año_Calendario & "-01-01")
    • El resto de días se suma un día al anterior: =A2+1
  • Día Semana: Columna B con el número y 3 letras del día de la semana con la fórmula:
    • =INDICE(Días_Semana;COINCIDIR(SUSTITUIR("*" & TEXTO(A2;"ddd");".";"");Días_Semana;0))
  • # Semana: Es el número de semana con el Sistema 1 de numeración:
    • Celda C2: =1
    • Otras celdas de la columna C: =C2+SI(COINCIDIR(SUSTITUIR("*" & TEXTO(A3;"ddd");".";"");Días_Semana;0)=1;1;0)
  • Núm. Semana: Será un cero si no coinciden el año o el mes seleccionados:
    • =SI(Y(TEXTO(A2;"yyyy")=TEXTO($A$2;"yyyy");O(Mes_Calendario="";TEXTO(A2;"mm")=IZQUIERDA(Mes_Calendario;2)));C2;0)
  • Mes: Número de mes con 2 cifras y 3 letras del nombre del mes:
    • =SUSTITUIR(TEXTO(A2;"mm-mmm");".";"")

Con la función SUSTITUIR(texto;".";"") elimino el punto "." que aparece en los días de la semana o los meses, por ejemplo: "lun." o "ene."


El cálculo de fechas con número de serie negativo impide usar las funciones DIASEM y NUM.DE.SEMANA, pues únicamente permiten días positivos y el cero, que es el día 30-12-1899.

Para fechas negativas la función DIASEM devuelve Error #¡NÚM!, por ejemplo para el día 1-1-1800: =DIASEM(-36522;2)

Para fechas negativas la función NUM.DE.SEMANA devuelve Error #¡NÚM!, por ejemplo para el día 29-12-1899: =NUM.DE.SEMANA(-1;2)

Tampoco se puede usar la función FECHA pues con fechas negativas produce un curioso efecto, por ejemplo: =FECHA(1899;1;1) devuelve el número de serie positivo correspondiente al día 1-01-3799.

Para los años comprendidos entre 0 y 1899, la función FECHA añade ese valor a 1900 para calcular el año. Por ejemplo, FECHA(119;2;1) devuelve la fecha 1/2/2019. 

En este calendario se emplean fórmulas que reemplazan a las dos que devuelven Error #¡NÚM!, DIASEM y NUM.DE.SEMANA, y a la función FECHA, como se ha visto más arriba en los campos de la hoja 'Fechas'.


Este calendario está incrustado como "solo lectura" en el siguiente cuadro:


Cómo crear la tabla dinámica

Se define la tabla dinámica con:

  • Origen de datos en el rango: Fechas!A1:E367
  • Filas: con los campos: Mes y Núm. Semana (Semana)
  • Columnas: con el campo: Día Semana (Día)
  • Valores: con el campo: Fecha (Calendario). Sumar por: Máx
  • Filtros: con el campo: Núm. Semana - El valor es mayor que 0


Formatos condicionales

En la hoja 'Calendario Dinámico' se ha añadido una tabla de fechas y sus eventos, por ejemplo de días festivos, en las columnas L:M, con fórmulas dinámicas para calcular los festivos, del tipo:

=FECHANUMERO(Año_Calendario & "-01-01")

Como ya comenté, no es posible usar la función FECHA para años anteriores a 1900, por lo que he usado la función anterior.

Las fórmulas para obtener los días de la Semana Santa las expliqué en el siguiente enlace, y he probado que la fórmula es correcta entre los años 1894 y 2203:

Cómputos que hacen la "Pascua"

Para colorear el día de hoy y los sábados, domingos y festivos, se han definido 4 formatos condicionales en el rango D6:J74

  • Color naranja para los días de eventos -festivos- con la fórmula: 
    • =SI.ERROR(COINCIDIR(D6;$L$6:$L$74;0);0)>0
  • Color amarillo para el día de hoy: =D6=HOY()
  • Color rojo oscuro para los domingos con la fórmula:
    • =Y(SUSTITUIR(TEXTO(D6;"ddd");".";"")="Dom";ESNUMERO(D6))
  • Color rojo claro para los sábados con la fórmula:
    • =Y(SUSTITUIR(TEXTO(D6;"ddd");".";"")="Sáb";ESNUMERO(D6))


CONCLUSIONES

Se demuestra que las hojas de cálculo de Google permiten calcular con fechas negativas anteriores al año 1900, cosa que no es posible con Microsoft Excel que solamente admite fechas positivas desde 1900.

Además Google Sheets refresca automáticamente las tablas dinámicas, lo que es muy práctico, ya que Excel obliga a refrescar manualmente las tablas dinámicas desde el menú: Datos - Actualizar todo, lo que a veces se olvida, y genera incorrecciones en los datos generados y reportados.

¿A quién no le ha pasado? ¡Que levante la mano!

3 Response to "Calendario en Google Sheets con una Tabla Dinámica"

.
gravatar
Unknown Says....

Buenas, me pregunto si se puede modificar para convertirlo en un calendario de uso escolar. Es decir, que empiece en septiembre de 2021 y muestre hasta junio de 2022.
Muchas gracias!

.
gravatar
Excel Pedro Wave Says....

Una desconocida me ha solicitado un calendario escolar por lo que he publicado una 2ª versión de este calendario en la que se puede definir el mes de inicio del calendario y mostrar los 12 meses siguientes. Enlace aquí:
Calendario Dinámico Google Sheets PW2

.
gravatar
Excel Pedro Wave Says....

Al abrir los enlaces de mis calendarios en Google Sheets, puedes hacer una copia, compartir o descargar la hoja de cálculo desde el menú: Archivo.
Por lo que no doy acceso para compartir en ningún caso, aunque me lo solicites.

Leave A Reply

Dime si te gusta lo que lees y, si no te gusta, dime por qué. Tengo habilitada la moderación de comentarios. Tu comentario se publicará pronto.

Mi lista de blogs