sábado, febrero 24, 2007

Gráficos Dinámicos con Autofiltro

Una característica interesante de Autofiltro es que si creamos una gráfico a partir de una lista, al aplicar Autofiltro, el gráfico se irá adaptando a los datos visibles (filtrados).

El archivo con el ejemplo se puede descargar aqui graficos dinamicos


Por ejemplo, a partir de esta lista



creamos este gráfico (que no tiene mucho sentido, en esta etapa del ejemplo)



Si filtramos la lista para mostrar sólo las ventas de José, el gráfico se adaptará



En cuanto empezamos a trabajar con este gráfico descubrimos que hay un problema: el gráfico se "encoge" cuando navega sobre líneas ocultas. Por ejemplo, nuestro gráfico puede llegar a verse así



Podemos sobreponernos a este problema y, mejor aún, hacer que en el título de nuestro gráfico aparezca el nombre del agente cuyas ventas estamos mostrando. Todo esto puede hacerse sin macros y usando las técnicas que mostramos en la nota anterior sobre cómo ocultar gráficos en Excel.

Como en ese ejemplo, usaremos dos hojas. En la Hoja1 tendremos la tabla de datos y mostraremos el gráfico (de hecho, una imagen del gráfico).
En la hoja dos reside el "motor" del modelo: el gráfico y la lista de los agentes. En la celda contigua al agente ponemos una fórmula que totaliza las ventas de cada agente. Esto nos servirá para identificar el nombre del agente cuyo gráfico queremos exhibir en la Hoja1.

Empezamos por cortar y pegar el gráfico que acabamos de crear a otra hoja (en nuestro ejemplo a la Hoja2).

Seleccionamos el rango "sobre" el cual se encuentra el gráfico y lo definimos con un nombre. En nuestro caso definimos el nombre "grafico"

grafico: =Hoja2!$A$2:$G$17

En la Hoja2 elegimos una celda vacía, por ejemplo $I$1 y la llamamos sin_graf

sin_graf =Hoja2!$I$2

En el rango A20:A24 ponemos la lista de los agentes; en la celda B20 ponemos la fórmula =SUMAR.SI(agente,A20,ventas) y la copiamos al rango B20:B24.

Los nombres usados en la fórmula se refieren a rangos en la Hoja1

agente: =DESREF(Hoja1!$A$2,0,0,CONTARA(Hoja1!$A:$A)-1,1)

ventas: =DESREF(Hoja1!$C$2,0,0,CONTARA(Hoja1!$C:$C)-1,1)

En la Hoja1 ponemos en la celda E1 la siguiente fórmula

=INDICE(Hoja2!A20:A24,COINCIDIR(Hoja1!F1,Hoja2!B20:B24,0))

En la celda F1 ponemos la fórmula

=SUBTOTALES(9,ventas)

Esta fórmula nos da el total de ventas del agente elegido con Autofiltro. La fórmula en la celda E1 nos da el nombre del agente, basado en el resultado de la celda F1.

Volvemos por un instante a la Hoja2 y ligamos el cuadro de texto del título del gráfico a la celda E1 en la Hoja1



Ahora tenemos que crear una imagen vinculada al gráfico en la Hoja3.
Elegimos una celda vacía, y la copiamos (Ctrl+C). Seleccionamos la celda E3, abrimos el menú Edición pulsando Mayúsculas (Shift) y elegimos Pegar--Vínculos Imagen. El resultado es una imagen vacía del tamaño de la celda.

Ahora creamos el nombre

mostrar_graf =SI(ESNOD(Hoja1!$E$1),sin_graf,grafico)

Esta fórmula nos permite mostrar u ocultar el gráfico basado en su resultado. Para qu esto sucede ligamos la imagen a la fórmula de la siguiente manera:

Seleccionamos la imagen que creamos con Pegar Vínculos—Imagen y en la barra de fórmulas reemplazamos la referencia por "=mostrar_graf"



Ahora podemos filtrarla lista con Autofiltro y veremos aparecer el gráfico. Por ejemplo, si elegimos Miguel



Este modelo tiene un serio problema potencial: si dos agentes tienen exactamente el mismo volumen de ventas, no se mostrará el gráfico.
Las soluciones posibles son:

1 – usar macros para determinar el nombre de la primera fila visible en la columna A a partir de la celda A2; ver el ejemplo desarrollado en el sitio Contextures;

2 – agregar una columna auxiliar que agregue a cada total de ventas del mes de cada agente un número identificatorio suficientemente pequeño como para no alterar los resultados. Por ejemplo, a Roberto le damos el número 1; a las ventas de Roberto le sumamos 1/1000000. Lo mismo con los restantes (Pedro 2/1000000, etc). Luego basamos las fórmulas y el gráfico en la columna auxiliar.

Technorati Tags:

Graficos Excel con listas desplegables – Segunda nota

En el pasado mostramos como generar un gráfico dinámico en Excel agregándole una lista desplegable. Para esto usamos el control Cuadro Combinado de la barra de herramientas Formulario.

La tabla de datos es la siguiente




Y el gráfico el siguiente




Uno de mis lectores me pregunta cómo hacer si queremos mostrar el gráfico inverso. Es decir, los meses de ventas por línea de producto.
La lista desplegable deberá mostrar las líneas de productos y el gráfico mostrar doce columnas, una por cada mes de ventas



La técnica es muy similar a la que mostramos en la nota anterior, pero con algunas pequeñas variantes.

Los pasos son los siguientes:

1 – Ponemos la lista en una hoja a la que llamaremos "Columnas"



Para este ejemplo hemos ubicado la tabla de datos en el rango A3:D15

2 – En una nueva hoja, a la que llamaremos "Control", ponemos:

en la celda A1 la fórmula =INDICE(columnas!B3:D3;A2)

en el rango A4:A15 la lista de los meses

en el rango B4:B15 la siguiente fórmula =INDICE(columnas!$B$4:$D$15;COINCIDIR(A4;columnas!$A$4:$A$15;0);$A$2)

en el rango D4:D6 la lista de las líneas de productos

La hoja "Control" se verá así



El error #¡VALOR! En la celda A1 desaparecerá más adelante.

3 – En la hoja "Columnas" creamos el gráfico, pero basándonos en las tabla de la hoja Control



Activamos la barra de herramientas Formularios, elegimos el control Cuadro combinado



y lo ponemos sobre el gráfico, tal como mostramos en la nota anterior sobre el tema.

Abrimos el menú del control y le damos las siguientes definiciones



Cerramos el menú y elegimos una de las líneas de la lista desplegable.



Como el control esta ligado a la celda A2 de la hoja Control, el error desaparece y el gráfico empieza a funcionar como gráfico dinámico.

La diferencia en la técnica se debe a que no podemos usar un rango horizontal como referencia en el control Cuadro Combinado.



Technorati Tags:

viernes, febrero 23, 2007

Ocultar gráficos en Excel

En las últimas notas hemos hablado sobre cómo ocultar y mostrar hojas en un cuaderno Excel. Siguiendo con esta onda del "ocultismo", veamos hoy cómo ocultar un gráfico que hemos insertado en una hoja Excel.
Supongamos esta tabla de datos con la cual construimos un gráfico



Una forma de ocultar el gráfico sería ocultar las filas de la hoja sobre las cuales "flota" el gráfico. Pero si queremos ubicar el gráfico a la izquierda de la tabla, no podremos hacerlo sin ocultar, al mismo tiempo, la tabla misma.

La solución consiste en ligar el gráfico a una imagen y crear un nombre que contenga una fórmula con una condición para mostrar u ocultar la imagen. Veamos la solución por partes.

Empezamos por mudar el gráfico cortándolo y pegándolo en una nueva hoja. Nos aseguramos que en la nueva hoja, la ubicación del gráfico coincida con un rango determinado. En nuestro ejemplo, el gráfico está ubicado sobre el rango A1:F16.



Seleccionamos el rango sobre el cual se encuentra el gráfico y le damos un nombre. En nuestro caso lo llamaremos "grafico"



Esto puede hacerse usando el cuado de nombres (como muestro en la imagen) o con el menú Insertar—Nombres—Definir

Ahora seleccionamos una celda en blanco (por ejemplo, H1) y la damos el nombre "ocultar".

Volvemos a la Hoja1, copiamos (Ctrl+C) una celda en blanco cualquiera, por ejemplo J1. Seleccionamos la celda que será el extremo superior izquierdo del gráfico, en nuestro caso D1. Mientras apretamos la tecla Mayúsculas (Shift) abrimos el menú Edición—Pegar vínculo de imagen



Esta opción sólo aparece si apretamos la tecla Mayúsculas (Shift) al abrir el menú Edición. Hemos creado una imagen que está vinculada a la celda J1.



Reemplazamos el vínculo de la imagen, $J$1, por el nombre "grafico" que contiene el rango sobre el cual se encuentra el gráfico



Inmediatamente aparece el gráfico de la Hoja2 que hemos vinculado a la imagen.

Nuestro próximo paso consiste en crear un nombre con una fórmula condicional que muestre u oculte el gráfico y una celda con un valor que sirva de parámetro a esta fórmula.

Creamos una lista desplegable con dos valores, si y no, en la celda C1. Para esto usamos Validación de Datos



Ahora creamos un nombre, mostrar_grafico, conteniendo la siguiente fórmula:

=SI(Hoja1!$C$1="si",grafico,ocultar)

Seleccionamos la imagen en la Hoja1 y reemplazamos el vínculo al nombre "grafico" en la barra de fórmulas por el nombre "mostrar_grafico"



A partir de este momento, cuando seleccionamos "si" en la celda C1, veremos el gráfico. Si seleccionamos "no", el gráfico desaparecerá.

Aquí pueden grafico_ocultodescargar el archivo con el ejemplo.

Technorati Tags: