Suele ser habitual que cuando finaliza un año, mucha gente empieza a planificar sus proyectos para el año siguiente: dejar de fumar, apuntarse al gimnasio, hacer dieta, viajar fuera del país, etc. Seguramente, muchos de los afortunados que tenemos empleo, lo primero que hacemos es buscar un calendario para mirar en qué días cae la Semana Santa, miramos también las vacaciones de verano, los días de Navidad, fin de año, y algún que otro puente, porque lo que más deseamos es disfrutar esos días, desconectando alejados de la fábrica o de la oficina.
Lo normal es que no dispongamos de un calendario del año que viene, hasta unos pocos días antes de la llegada del nuevo año, bien porque nos manda una agenda un proveedor, bien porque nos regala un calendario de pared una entidad financiera, o bien porque nos lo manda una empresa que no conocemos y que quiere vendernos algún producto o servicio.
Pues bien, hoy vamos a ver como podemos generar nuestros propios calendarios para imprimir y poder tenerlos siempre a mano, para cuando los necesitemos. Para ello utilizaremos Excel, esa potente herramienta que nos permite tratar no solo datos numéricos, o de texto, sino también fechas y unidades de tiempo. Excel tiene una limitación en cuanto al tratamiento de fechas, que hace que solo podamos operar con ellas, si están comprendidas entre el 01-01-1900 y el 31-12-9999. En el caso de utilizar Excel en su versión para un ordenador Macintosh, el rango de fechas permitidas, pasa a ser desde el 01-01-1904, hasta el 31-12-9999.
Nosotros vamos a generar un calendario para imprimir que cubra el rango desde el año 1920 hasta el 2100. ¿Parece suficiente, verdad?. Pues bueno, si todavía quieres más años, simplemente cambiando una línea del código fuente, podrás alterar ese rango, por si deseas acomodarlo adaptándolo completamente las posibilidades de Excel (si usas una versión para PC, desde el año 1900 al 9999, y si utilizas Excel para Mac, desde el año 1904 al 9999).
Lo primero que haremos será crear los 12 cuadros, cada uno para cada mes. Cada cuadro estará formado por una celda combinada, donde incluiremos el nombre del mes, y 49 celdas de 7x7, para los días de la semana.
Lo que haremos, será solicitar vía un InputBox, el año para el cual queremos crear el calendario. Una vez introducido, se nos generarán los días de cada mes, colocándose donde les corresponde. Si el día 1 de enero cae en martes, pues aparecerá él martes, y si cae en viernes, pues aparecerá en viernes. Para hacer todo esto, utilizaremos exclusivamente funciones de Excel. Concretamente, para el nombre del mes, tomaremos como referencia el año, que está en la celda K2. En el caso concreto del mes de enero, por ejemplo, la función será esta:
=FECHA($K$2;1;1) |
Para la primera fila, y en el caso del mes de enero, bajo el rótulo lunes pondremos esta fórmula:
=SI(ELEGIR(DIASEM(B5);"Do";"Lu";"Ma";"Mi";"Ju";"Vi";"Sa")=B6;1;"") |
Para el resto de días de la semana, pondremos un condicional. En el caso del martes, utilizaremos por ejemplo, esta:
=SI(B7="";SI(ELEGIR(DIASEM($B$5);"Do";"Lu";"Ma";"Mi";"Ju";"Vi";"Sa")=C6;1;"");B7+1) |
En la segunda fila, bajo el lunes, y en el caso de estar trabajando con el mes de enero, pondremos esta fórmula:
=SI(H7<>"";SI(H7+1>DIA(FIN.MES($B$5;0));"";H7+1);"") |
Para el resto de días de la semana, haremos algo parecido, cambiando en la fórmula anterior, la celda H7, por la celda inmediatamente anterior al día de la semana con el que estemos trabajando.
El modelo, como veis, no tiene mucha complicación, Tan solo hay que utilizar la fórmula ELEGIR, para saber junto con DIASEM, el día de la semana, y compararlo con los datos que aparecen arriba y que contienen el día de la semana (Lu, Ma, Mi, etc.), aunque podéis utilizar otras fórmulas, para obtener esos mismos resultados. También utilizaremos la función FIN.MES, para saber cual es el último día del mes, y que no siga rellenando el calendario más allá del día 30 o 31 (en el caso de febrero, del 28 o 29, según proceda).
Si la función FIN.MES os devuelve el error #¿NOMBRE?, hay que tener habilitadas las herramientas para análisis. Eso es tan sencillo como marcar la opción Herramientas para análisis, desde el menú Herramientas, y seleccionando a continuación Complementos...
Por otra parte, me comentan, que al abrir el fichero desde una versión de Excel en inglés, la función FIN.MES no la traduce de forma automática. En ese caso hay que hacer un reemplazo (desde Edición, seleccionando la opción Reemplazar), y sustituir FIN.MES por EOMONTH.
Como parece que estar leyendo todo esto, puede parecer un poco lioso, si no tenemos delante el fichero de Excel, lo mejor es que lo descarguéis, y lo probéis. Al final de este artículo, hay un enlace para descargarlo.
Los macros que utilizaremos, son realmente sencillos. El primero será este, que hará que se proteja la hoja, para que nadie cambie ni borre nada. La protección no tiene ningún password:
Sub Auto_open() 'Al abrir el libro, 'protegemos la hoja (sin ningún password) ActiveSheet.Protect End Sub |
El segundo macro es para imprimir el calendario, definiendo el área a imprimir, ajustado a las dimensiones de 1 página de alto y 1 de ancho, y encajándolo todo, horizontal y verticalmente:
Sub imprimir_calendario() 'Seleccionamos el área para imprimir ActiveSheet.PageSetup.PrintArea = "$A$1:$Y$40" 'definimos las preferencias de impresión With ActiveSheet.PageSetup 'Centramos la impresión .CenterHorizontally = True .CenterVertically = True 'Ajustamos la impresión a 1 página 'tanto de alto como de ancho .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With 'Imprimimos el calendario ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub |
Este último macro, es para el año. Pondremos el texto en un tamaño de fuente de 18 pixels, lo centraremos en un rango de celdas, y le añadiremos delante el texto "Año", entre otras cosas:
Sub anio() 'Ocultamos el procedimiento Application.ScreenUpdating = False 'Desprotegemos la hoja ActiveSheet.Unprotect 'fichamos la celda donde estamos celda = ActiveCell.Address 'Presentamos un inputbox para preguntar el año respuesta = InputBox("Introduce el año:", "Año") 'Si el año está entre 1950 y 2100, lo escribimos 'en la celda K2, en caso contrario, mostramos un mensaje If Not IsNumeric(respuesta) Or respuesta < 1920 Or respuesta > 2100 Then 'mostramos un mensaje MsgBox ("No es un año válido. Debe estar entre 1920 y 2100") Exit Sub Else 'si el año es válido, lo escribimos en la celda K2 Range("K2").Select ActiveCell = respuesta Selection.NumberFormat = """Año"" ###0" 'ponemos el año en grande, y lo centramos With Selection.Font .Size = 18 End With Range("K2:O2").Select With Selection .HorizontalAlignment = xlCenter End With Selection.Merge End If 'volvemos donde estábamos Range(celda).Select 'protegemos la hoja ActiveSheet.Protect 'Mostramos el procedimiento Application.ScreenUpdating = True End Sub |
Por cierto, a este último macro, le he puesto por nombre “anio” en lugar de “año”, por si algún usuario no tiene en su teclado la letra ñ, o por si usa una versión inglesa de Excel, y para evitar posibles problemas al convertir las funciones y los procedimientos.
Si deseáis añadir el complemento de las herramientas para análisis directamente a través de un macro, podéis añadir esta primera línea al macro Auto_open():
AddIns("Herramientas para análisis").Installed = True |
Aquí podéis ver un pantallazo de cómo nos quedaría el calendario, una vez elegido el año. Evidentemente esto no será lo que saldrá por la impresora cuando imprimamos el calendario, pues se trata de un pantallazo para ilustrar este artículo, y aquí salen visibles los botones para los macros:
Para los más curiosos, en el calendario se utiliza también el formato condicional, con el fin de poner de color amarillo suave, aquellas celdas que no contienen ningún día, y diferenciarlas así, de aquellas que tienen un número. Si nos situamos en cualquier celda, y vamos a la opción de menú Formato, y a continuación a Formato condicional…, veremos esto (aunque no se pueda apreciar muy bien, aparece en color amarillo pálido, el fondo de la celda):
Si preferís utilizar calendarios con más decoración, con imágenes, y que no estén hechos en Excel, sino con otras aplicaciones, podéis pasaros por algunos sitios de la red. Entre otros, podéis visitar por ejemplo, este blog que contiene abundante información sobre cómo obtener calendarios para imprimir, aunque posiblemente este último sitio esté dirigido más a un público infantil, al que seguramente Excel todavía les suena a chino :-)
Desde aquí podéis descargar el fichero, con el ejemplo que hemos visto en este artículo, para que podáis elaborar vuestros propios calendarios para imprimir.
5 comentarios:
Ya lo descargué... y lo probé y va bien... Gracias!
muy buen trabajo!!! Gracias por toda la ayuda que prestas a la comunidad excelera
Hola, tiene poco que encontré tu blog, pero me parece muy útil, muchas gracias por compartirlo.
Buen trabajo amigo
Javier:
Me ha encantado la idea del calendario, solo una sugerencia:
Si en las celdas de los dias, en lugar de utilizar numeros, utilizas la fecha entera, el formato condicional se puede pegar sin problemas; si no, deberas construir la fecha al aplicar el formato
Publicar un comentario