Hojas de cálculo en Excel - página principal

Calendarios para imprimir

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:

Anónimo dijo...

Ya lo descargué... y lo probé y va bien... Gracias!

pollander dijo...

muy buen trabajo!!! Gracias por toda la ayuda que prestas a la comunidad excelera

Anónimo dijo...

Hola, tiene poco que encontré tu blog, pero me parece muy útil, muchas gracias por compartirlo.

Anónimo dijo...

Buen trabajo amigo

miguel dijo...

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