viernes, abril 18, 2008

Formato condicional por bloques – segunda nota

Uno de lo usos de formato condicional es facilitar la lectura de tablas, señalando con un fondo de color determinadas filas o columnas.
En la primer nota sobre cómo facilitar la lectura de tablas con formato condicional vimos algunas técnicas para señalar filas en forma alternada (por ejemplo, poner un fondo gris a todas las filas impares, o por intervalos determinados).
En la primer nota sobre formato condicional por bloques, vimos como señalar la primer fila de un bloque de datos




En realidad lo que estaba buscando cuando empecé a escribir la nota era como poner un fondo en forma alternada a todo el bloque, es decir, esto



Partiendo de la premisa que nuestra tabla está siempre ordenada por sucursal, queremos poner un fondo alternado que nos ayude a visualizar cada bloque de datos. Queremos que esta funcionalidad sea dinámica, es decir, si agregamos o quitamos líneas a la tabla, el fondo del bloque se adaptará automáticamente.

El problema que debemos resolver es encontrar un criterio que se pueda evaluar como VERDADERO para el primer bloque, FALSO para el segundo, nuevamente VERDADERO para el tercero y así sucesivamente.

Para facilitar la explicación, mostraremos varias columnas auxiliares, pero la solución definitiva utilizará una única columna auxiliar.

Empezamos por crear una columna auxiliar donde evaluamos si el contenido de una celda es distinto del de la celda inmediata superior



El doble signo "-" en la fórmula fuerza a Excel a convertir el valor VERDADERO en 1 y el resultado FALSO en 0. Lo mismo puede hacer multiplicando la expresión por 1.

En la segunda columna auxiliar ponemos esta fórmula en la celda E2

=CONTAR.SI($D$2:D2;1)

y la copiamos a lo largo del rango hasta E16



Como pueden ver, todas las celdas relacionadas a la Sucursal 1, dan como resultado 1, las de Sucursal 2 dan 2 y así sucesivamente.
Así tenemos un número que identifica cada bloque. Pero lo más importante es que tenemos una serie donde se alternan los números pares y los impares. De esta manera podemos usa la función ES.IMPAR (ISODD en inglés) para generar una serie de valores VERDADERO y FALSO que se alternan con cada bloque de sucursales



Podemos prescindir de las columnas auxiliares E, F y G usando esta fórmula

=ISODD(CONTAR.SI($D$2:$D2;1))



Para mayor comodidad encapsulamos esta fórmula en un nombre, "fcc"



Ahora, seleccionamos la tabla y aplicamos formato condicional usando nuestra fórmula, que hemos puesto en el nombre "fcc" como criterio



Como ven, sólo hemos dejado la columna auxiliar D, que usamos en nuestra fórmula.



El archivo con el ejemplo se puede descargar aquí.




Technorati Tags:

miércoles, abril 16, 2008

Formato Condicional por bloques.

En un comentario a la nota sobre Formato condicional en Excel – Facilitando la lectura de tablas, un lector proponía un método para señalar filas por bloques. En la nota mostrábamos como poner un fondo de color en una fila basándonos en algún criterio. Por ejemplo, poner un fondo gris en las filas impares, o en cada quinta o sexta fila, etc.
Pero supongamos que tenemos una tabla de ventas ordenada por sucursales y queremos señalar cada fila dónde cambia la sucursal. Es decir, nuestro criterio no sigue un patrón constante. Por ejemplo




Lo que queremos lograr es esto:



Cada vez que cambia el nombre de la sucursal, la fila recibe un fondo de color de manera que sea fácil visualizar dónde sucede el cambio.

Como ya hemos explicado, podemos usar formato condicional con la opción "Fórmula" a condición que esta sea una expresión lógica. Es decir, que de cómo resultado VERDADERO o FALSO. Si el resultado es VERDADERO, se aplica el formato.
Mi lector proponía una fórmula que incluía la función FRECUENCIA. Este función debe utilizarse en fórmulas matriciales y no me parece que pueda funcionar en Formato Condicional (si, mea culpa!, no me tomé el trabajo de comprobar la fórmula).
En esta nota propongo una método más sencillo, usando la función CONTAR.SI.
Ponemos esta fórmula =CONTAR.SI($A$2:A2;A2) en el rango D2:D16



Como pueden apreciar, cada vez que cambia el nombre de la sucursal el resultado es 1. Si convertimos nuestra fórmula a

=CONTAR.SI($A$2:A2;A2)=1

obtenemos VERDADERO cada vez que el nombre de la sucursal aparece por primera vez en nuestra lista.



Esta fórmula la usamos en Formato Condicional para lograr nuestro objetivo



Tenemos que asegurarnos que las referencias a las celdas sean las correctas

=CONTAR.SI($A$2:$A2;$A2)=1

El resultado es el esperado






Technorati Tags:

lunes, abril 14, 2008

Encontrar una fecha a partir de la semana del año

Excel pone a nuestra disposición todo un arsenal de funciones para extraer información a partir de fechas. Por ejemplo, si tomamos la fecha de hoy, 14 de abril del 2008 podemos extraer el número de día (que es más bien obvio), el día de la semana (lunes, martes, etc), el mes y al año



Quien quiera más información sobre funciones y cálculos con fechas y horas, puede apretar el enlace Fechas y Hora en el área de etiquetas del blog (en la columna a la izquierda).

Un lector me consulta cómo obtener los días de una semana si sólo sabemos el año y el número de semana.

Supongamos que tenemos el año en la celda B1 de la hoja y el número de semana en la celda B2



Empezamos por calcular el primer día del año con la fórmula =FECHA(B1;1;1)



Cada semana tiene necesariamente 7 días, así que podemos calcular el número de días transcurridos hasta el fin de la semana que aparece en la celda B2, con la fórmula =B2*7



Como pueden apreciar, el resultado es incorrecto. Hemos agregado el control Calendario, para poder controlar el resultado de nuestra fórmula.

Lo que queremos obtener es el primer lunes de la semana, para lo cual tendremos que hacer algunas correcciones a nuestra fórmula.

La corrección la calculamos con esta fórmula

=(1>=DIASEM(FECHA(B1;1;1))*7)+1-DIASEM(FECHA(B1;1;1))

Sumamos este resultado al de nuestra fórmula original y obtenemos el último día de la semana buscada



Ahora tenemos que llevar el resultado al primer día, para lo cual todo lo que tenemos que hacer es restar 6 del resultado obtenido

Nuestra fórmula final será

=FECHA(B1;1;1)+(B2*7)+(1>=DIASEM(FECHA(B1;1;1))*7)+1-DIASEM(FECHA(B1;1;1))-6



Esta fórmula siempre nos dará el primer lunes de la semana. Por ejemplo, si buscamos la primer semana del 2008, el primer día es, obviamente, el 01/01/2008. Pero el primer lunes de esa semana es el 31/12/2007



Si queremos extraer las fechas por semanas a partir del primer día del año, es decir, por intervalos de 7 días, tenemos que usar esta fórmula

=FECHA(B1;1;1)+(B2*7)-7




El archivo con el ejemplo se puede descargar aquí

Technorati Tags: