skip to main |
skip to sidebar
En la nota anterior expliqué como crear un gráfico de cascada, ahora realizaremos algunos cambios que mejoraran ese gráfico. Si bien estos cambios también pueden lograrse mediante macros, en este artículo mostraré alternativas sin usar macros ya que en ciertos casos es necesario generar un archivo sin incluir macros.
Como en el ejemplo anterior utilizamos la siguiente tabla para armar nuestro grafico y le asignamos el nombre TablaChart.

Veamos los cambios
El primer cambio nos permitirá asignarle distintos colores a las variaciones, en el caso que sean positivas o negativas. Para lograr esto separamos los valores positivos y negativos en dos columnas que serán incluidas como dos series distintas de datos y por lo tanto podremos asignarle distintos colores.
La columna que tiene los valores positivos contiene la siguiente fórmula =SI(B2>0;B2;0). En el caso de ser un valor negativo entonces mostramos un cero y por lo tanto esto no queda visible en el gráfico. A esta columna la llamaremos Series2Mas.
Por otra parte la columna que tiene los valores negativos contiene la siguiente fórmula =SI(B2<0;ABS(B2);0). Similar al caso anterior, si la variación es positiva se mostrará cero y sino el valor absoluto. A esta columna la llamaremos Series2Menos.

El otro cambio es la utilización de las tablas de Excel 2007 para que podamos ingresar nuevas filas según la necesidad y el gráfico se actualice automáticamente. Para lograr que funcione correctamente la tabla y se actualicen las fórmulas debemos utilizar una misma fórmula para cada fila y que ésta haga referencia a la misma fila.
En el ejemplo anterior las fórmulas de la columna Series1 eran diferentes para la primera y última fila ya que siempre llevan el valor cero. Lo primero que debemos lograr es una fórmula que devuelva 0 solo para la primera y última fila de la tabla. Para saber si estoy en la primera fila utilizamos FILA(TablaChart) y si es igual a FILA(), que devuelve la fila actual, entonces estamos en la primer fila. Para calcular la última fila FILA(TablaChart)+FILAS(TablaChart)-1, de la misma forma chequeamos si esta es igual a FILA(). La fórmula completa sería =SI(O(FILA(TablaChart)=FILA();FILA(TablaChart)+FILAS(TablaChart)-1 = FILA());0;B2).
Finalmente la fórmula utilizada para acumular los valores, en el ejemplo anterior llamada Ultimo tope, tampoco funciona correctamente al insertar nuevas filas en una tabla y por ello lo reemplazamos por =SUMA($B$2:B2), la referencia absoluta fija la primer fila mientras que la segunda se incrementa a medida que se incrementan las filas en la tabla.
Si integramos la fórmula para acumular con la explicada en el paso anterior obtenemos la siguiente fórmula =SI(O(FILA(TablaChart)=FILA();FILA(TablaChart)+FILAS(TablaChart)-1 = FILA());0; SI(B2<0;SUMA($B$2:B2);SUMA(B$2:B2)-B2))

Para acceder al archivo del ejemplo haga clic aquí.
Excel nos permite trabajar con cantidades muy grandes de datos y muchas veces esta información va creciendo a medida que transcurre el tiempo. Al modificarse los rangos en donde se encuentran los datos se deben modificar las fórmulas que usan dichos datos para que incluyan la totalidad del rango.
Si tenemos un archivo con muchas fórmulas esto genera un trabajo tedioso y que puede generar resultados incorrectos. Para facilitar este proceso es posible definir nombres a los rangos utilizados que nos permite ajustar el rango definido para ese nombre y luego todas las fórmulas utilizarán el nuevo rango. Para rangos de datos que cambian constantemente este proceso también puede volverse tedioso.
En la nota de hoy veremos una alternativa que nos permite definir el rango dinámicamente sin tener que actualizar las fórmulas o los nombres de los rangos.
Para poder definir el nombre del rango dinámicamente debemos detectar cual es la última fila utilizada en el rango y para ello utilizamos la siguiente fórmula array : =MAX(FILA(1:65378)*(A1:A65378<>"")) (recuerden presional Ctrl + Shift + Enter)
Luego definimos el nombre UltimaCelda para la celda que contiene esta fórmula.
Esta fórmula genera en primer lugar un arrary con números de filas (FILA(1:65378)) del tamaño que nosotros deseamos. Esto definirá el límite de crecimiento del rango. Luego se genera un array con valores lógicos, que serán VERDADEROS si la celda no esta vacía. Al multiplicarlos solo me quedan los valores de las filas con datos, el resto es siempre cero. Finalmente la función MAX devuelve el valor máximo del array.
Con esta información definimos un nuevo nombre en Excel llamado Rango. (Para mas información ver nota sobre nombres) y en el campo Aplica a en lugar de escribir un rango fijo (del tipo A1:C10) escribimos la siguiente fórmula: =DESREF(Hoja1!$A$1;0;0;UltimaCelda)

La función DESREF permite definir un rango a partir de una celda de referencia, la función toma 5 parámetros. El primero es la celda de referencia, los siguientes dos indican la cantidad de filas y columnas de distancia que va a tener nuestro rango desde el valor de referencia. Los últimos dos valores indican la cantidad de filas y columnas que tendrá nuestro rango.
Para descargar el ejemplo haga clic aquí.
Otra aplicación de esta fórmula es para la definición del rango de impresión. Si ya hemos definido una, entonces encontraremos en la lista de nombre uno llamado : Área_de_Impresión si ingresamos la fórmula arriba explicada el rango se actualizará automáticamente.
Retomando los artículos sobre funciones de búsquedas, explicaremos en el artículo de hoy una función que no es muy utilizada pero es muy fácil ya que es similar a otra función que es una de las de mayor uso en Excel. Por supuesto no referimos a BUSCARV.
La función BUSCARH (HLOOKUP para la versión en inglés) nos permite realizar búsquedas en un rango y una vez encontrado devolverá una celda que se encuentra en la misma columna pero a una cantidad determinada de líneas hacia abajo.
Dicha función toma cuatro parámetros. El primero es el valor buscado, el segundo es el rango donde se va a realizar la búsqueda, el tercero es el número de la fila dentro del rango que se utilizará para devolver el valor y el último parámetro indica si queremos que el valor buscado coincida exactamente con algún valor en el rango.
Si no hay coincidencias se devuelva el error #N/A. Si deseamos evitar este error podemos utilizar la función SI.ERROR como se explicó en una nota anterior.
Como pueden ver los parámetros y su funcionamiento son muy similares a la función BUSCARV y por lo tanto surge la pregunta: ¿Por qué tenemos dos funciones tan similares?
En muchos casos en Excel tenemos que trabajar con datos de planillas creadas por otras personas y por lo tanto no podemos cambiar los formatos sino que tenemos que adaptarnos a ellos. De acuerdo como estén distribuidos la función BUSCARH puede ser mas conveniente que BUSCARV.
Veamos algunos ejemplos.
Disponemos de una lista de ventas donde se muestran en las columnas las regiones y en las filas los meses.

Si deseamos buscar las ventas del mes de Mayo para la región Sur podemos utilizar la siguiente fórmula =BUSCARH("Sur";B1:E13;6;FALSO) y para buscar las ventas del mes de Agosto para la región Oeste podemos utilizar =BUSCARH(“Oeste”;B1:E13;9;FALSO).
Podran ver que el número de la fila sumando uno es igual al nro del mes. Esto es porque la primer fila contiene los encabezados. De esta forma podemos fácilmente obtener los distintos meses utilizando los valores.