Traducir el blog

Calendario Perpetuo desde 1900 con eventos

Posted on noviembre 11, 2020 by Excel Pedro Wave

0) Introducción al Calendario Perpetuo

Esta no es la tercera parte de la trilogía que estoy escribiendo sobre fechas anteriores al año 1900, sino que es un inciso para presentar un nuevo Calendario Perpetuo con fechas desde el año 1900, y que tiene como valor añadido la posibilidad de mostrar los eventos o efemérides de cada día pasando el ratón sobre las celdas. Accede al siguiente enlace en inglés para saber cómo:

How to Create a Rollover Effect in Excel: Execute a Macro When Your Mouse is over a Cell

La tercera entrega de la trilogía se basará en este calendario pero usando fechas en VBA, por lo que abarcará fechas desde el 1 de enero del año 100, con lo que servirá para todo el Calendario Gregoriano.

Este es el aspecto del nuevo calendario perpetuo:



1) Características relevantes

Características relevantes del Calendario Perpetuo en Excel:

  1. Calendario Perpetuo Gregoriano con un rango de fechas del 01-03-1900 al 31-12-9999.
  2. Vista de 3 meses: el mes seleccionado; el anterior y el posterior.
  3. El primer día de la semana puede ser domingo o lunes.
  4. Muestra u oculta los días de otros meses.
  5. Sábados y domingos marcados en color rojo.
  6. Flechas para incrementar o decrementar el mes, rotando como un carrusel.
  7. Flechas para cambiar el año.
  8. Selección de un mes.
  9. Selección de una año mediante 2 cifras para las centenas y 2 cifras para las unidades.
  10. Si se decrementa el año 1900 pasa al año 9999.
  11. Si se incrementa el año 9999 pasa al año 1900.
  12. Selección del día de hoy.
  13. Selección del primer día del calendario perpetuo: 01-03-1900.
  14. Selección del último día del calendario perpetuo: 31-12-9999.
  15. Muestra u oculta un calendario auxiliar y otros datos.
  16. Tabla de fechas con las efemérides guardadas, por ejemplo los Días de Independencia de los países obtenidos de Wikipedia (enlace aquí).
  17. Hasta 12 efemérides por día en 3 páginas con 4 eventos cada una.
  18. BONUS: Al pasar el cursor del ratón sobre una celda muestra los eventos de ese día.
  19. Activa o desactiva el evento del ratón sobre una celda.
  20. Botones de animación con avance y retroceso de los meses y con 5 velocidades de animación.
  21. Botones para ver los primeros o los últimos 3 meses del año.
  22. Botones para incrementar o decrementar de 3 en 3 meses.
  23. Filtro de un día en la tabla de fechas.

No voy a explicar cómo usar este calendario, lo interesante es probar cada una de las características y experimentar con el diseño de la experiencia del usuario (UXD - User eXperience Design) de este calendario perpetuo.

Si tienes sugerencias para mejorar este calendario, puedes compartirlas escribiendo un comentario al final de este artículo.


2) Plantilla del Calendario Perpetuo desde 1900

Descarga la plantilla totalmente gratuita, con las macros visibles y las hojas protegidas sin contraseña, desde Google (con el botón "Excel Download") o desde el enlace a Microsoft OneDrive:




3) Cómo he diseñado este Calendario Perpetuo

Este calendario perpetuo se compone de 3 hojas:

  • Año>=1900 - Donde se muestra y se controla el calendario.
  • Fechas - Donde se guarda la tabla de fechas.
  • Idiomas - Donde se guardan las traducciones de los idiomas.

En la hoja 'Idiomas' se selecciona en la celda A1 entre 2 idiomas: Español o English. Los textos de la columna A son las traducciones que aparecen en el calendario. Si quieres, puedes añadir más columnas con más idiomas. Una macro cambia los textos de la cabecera de la tabla de la hoja 'Fechas'.

La hoja 'Fechas' contiene la tabla de fechas en 3 columnas: Fecha; Evento y Núm. Serie VBA. Esta última columna es calculada con una macro y sirve para ordenar las fechas por su número de serie en VBA, o sea, con números positivos y negativos. He incluido algunas fechas significativas del calendario gregoriano desde 1900 y las efemérides de los Días de Independencia de varios países, obtenidos de la Wikipedia - enlace aquí. Desprotegiendo la hoja sin contraseña se puede editar cualquier fecha.

El calendario perpetuo está en la hoja 'Año>=1900'. Para explicar cómo ha sido diseñado nos centraremos en el mes central del calendario, en el rango K5:Q12


En la celda L5 se muestra el nombre del mes pero contiene el día 1 del mes y año seleccionados con alguno de los controles del calendario: con el desplegable de la propia celda; con el cambio de año; con las flechas de incremento o decremento de los meses; con las teclas de animación de la fila 14.

En el rango X34:Z46 está la tabla auxiliar con la lista de meses que se carga con la validación de datos de la celda L5.

El cálculo de un mes del calendario comienza en el calendario auxiliar que se encuentra entre las filas 23 y 30 (se puede ver haciendo clic en la fila 21).


En las celdas B25, K25 y T25 se calcula el primer día de la semana en que comienza un mes, con las fórmulas:

B25: =C5+1-DIASEM(C5;Rango_DíaSemana)

K25: =Rango_MesNom+1-DIASEM(Rango_MesNom;Rango_DíaSemana)

T25: =U5+1-DIASEM(U5;Rango_DíaSemana)

Siendo:

Rango_MesNom: ='Año>=1900'!$L$5

Rango_DíaSemana: ='Año>=1900'!$Z$2 (La semana comienza en: 1-dom; 2-lun)

Esas celdas contienen el número de serie de una fecha, por lo que el resto de los días se calculan a partir de esas celdas sumando un uno al día anterior. Se calculan 6 semanas para cubrir todo el mes. El formato de las celdas de esas fechas es una letra "d", por lo que se muestra el número del día. En los meses de las filas 23 a 30 se ven siempre los días de meses anteriores. Los días con eventos o efemérides en la hoja 'Fechas' se marcan en color naranja gracias al formato condicional. Los sábados y domingos se pintan en color rojo.

¡¡¡ Y ahora el truco fundamental !!!

¿Qué fórmula produce el efecto de pasar el ratón por encima de la celda ejecutando una macro?

Vamos a analizar una fórmula posible para la celda K8:

=HIPERVINCULO(MouseOver(K26);DIA(K26))

Hace referencia a la celda K26 del calendario auxiliar, que contiene una fecha cualquiera y llama a la función HIPERVINCULO que tiene 2 argumentos.

El segundo argumento es un nombre descriptivo que, en este caso, llama a la función DIA para mostrar el número del día en la celda.

El primer argumento es la ubicación del hipervínculo, ejecutando la macro MouseOver(K26), con la celda de la fecha auxiliar como argumento.

Esa era la fórmula original que sirve únicamente para días dentro del mes del calendario. La fórmula definitiva en la celda K8 es un poco más compleja:

=HIPERVINCULO(MouseOver(K26);SI.ERROR(SI(O($Z$3="ü";MES(K26)=$K$5);DIA(K26);"");""))

Esta fórmula sirve para todos los días del mes y tiene en cuenta si se muestran los días de otros meses (controlado por la celda Z3) y si hay errores en las fechas, cosa que sólo ocurre en enero de 1900 y en diciembre de 9999.

La macro MouseOver está en el módulo ModPasarRatónSobreCeldas

La función MouseOver devuelve una String con la ubicación de la propia celda en que se llamó, pero antes modifica la celda B16 ("Rango_Día") con la fecha del día sobre el que ha pasado el ratón por encima. Este efecto lo publicó por primera vez Jordan Goldmeier en su blog OPTION EXPLICIT VBA por lo que le estoy muy agradecido, pues ha contribuido a enriquecer la interactividad y usabilidad de Excel. En el siguiente enlace hay un ejemplo mío de lo que se puede llegar a hacer con este excelente efecto de pasar el ratón sobre las celdas de Excel sin tener que hacer clic en ellas:

pedrowave.blogspot.com - Como pintar con Excel


Las fórmulas que llaman a la función HIPERVINCULO consiguen cambiar el día en la celda B16, denominada "Rango_Día", con la macro MouseOver:

            Range("Rango_Día").Value2 = rCelda.Value2

¡MENUDO TRUCO!

En las filas 17 a 19 se muestran los eventos o las efemérides del día de 4 en 4 y hasta en 3 páginas, obtenidas de la tabla auxiliar en el rango B34:V46


La columna "Fila" contiene una fórmula matricial (introducida con las teclas: Control + Mayúsculas + Intro) para obtener 12 filas con los eventos del día extraidos de la tabla de la hoja 'Fechas':

{=SI.ERROR(K.ESIMO.MENOR(SI($B$16=Rango_Fechas;FILA(Rango_Eventos)-MIN(FILA(Rango_Fechas))+1;"");FILA()-FILA(B34));0)}

Haciendo clic en el día de la celda B16, si hay eventos en ese día, los filtra en la hoja 'Fechas'.


4) Próximos pasos

En una próxima entrega publicaré un calendario perpetuo similar pero usando las fechas de VBA en lugar de las de Excel, con lo que se podrán programar eventos desde el día 1 de enero del año 100.

Si te gustan los calendarios puedes leer todos los calendarios que he publicado hasta la fecha en este enlace:

https://pedrowave.blogspot.com/search/label/calendario

9 Response to "Calendario Perpetuo desde 1900 con eventos"

.
gravatar
Unknown Says....

Después de ver la programación, se que no es una tarea sencilla y mucho tiempo de dedicación... Felicidades por estos aportes...Valen Oro Puro!!!

Hay mucho que analizar y aprender de este archivo...!!!



Gracias.

.
gravatar
Excel Pedro Wave Says....

Como has hecho el mismo comentario en Facebook, te vuelvo a dar las gracias por tu valioso comentario Leopoldo Blancas. La verdad es que le he dedicado unas cuantas horas a intentar pulir este calendario, que es uno más de los más de 20 que he publicado en 10 años.
Ahora falta que me lo testeen los usuarios y vean si es de utilidad, aunque solamente sea como ayuda al aprendizaje de Excel.

.
gravatar
Excel Pedro Wave Says....

En el siguiente enlace puedes ver y descargar el nuevo Calendario Perpetuo con fechas desde antes de 1900, ya que está diseñado con fechas en VBA desde el 1 de enero del año 100.

Calendario Perpetuo desde antes de 1900

.
gravatar
Anónimo Says....

tengo una duda quiero añadir una columna al calendario, donde ponga la semana del año que es, es decir, 1 o 25, la que corresponda, pero no lo logro hacer, me esta dando fallo, pero no veo como arreglarlo, sabes como se puede hacer, es para poder utilizarla en una programación y las semanas pueden bailar de un año a otro

.
gravatar
Excel Pedro Wave Says....

Para añadir el número de semana se usa la función: NUM.DE.SEMANA(núm_de_serie,[tipo_de_devolución])
Dependiendo de la localización geográfica se usará un valor distinto para el tipo de devolución...

.
gravatar
Anónimo Says....

gracias, es para españa, lo del numero de la semana, es para hacer una programacion de un colegio

.
gravatar
Anónimo Says....

hola he intentado hacer lo que tu me dices, utilizando la formula, pero cuando llego al mes de agosto, vuelve a reiniciarse, y empieza a contar desde 1, no se que puedo haber hecho mal, lo que no se es como enviarte mi fichero excel para que lo veas

.
gravatar
Excel Pedro Wave Says....

Contestando a tu primera pregunta, el tipo de devolución a usar como argumento para España es el tipo 21, que es el único tipo que utiliza el Sistema 2 según ISO 8601, que generalmente se conoce como el sistema de numeración de semanas europeo.

.
gravatar
Excel Pedro Wave Says....

Si tienes problemas para usar la función NUM.DE.SEMANA, este blog no es de ayuda. Te recomiendo registrarte en un foro de ayuda, como TodoExcel.com, y publicas un tema solicitando ayuda y adjuntas tu archivo explicando qué quieres conseguir, dónde quieres los números de semana, que has intentado hasta ahora, dónde te falla y el resultado que esperas.

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