Mostrando las entradas con la etiqueta Graficos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Graficos. Mostrar todas las entradas

domingo, septiembre 29, 2013

Formato condicional en gráficos de Excel - Tercera nota

En las notas anteriores del tema mostré códigos para generar efectos de formato condicional en gráficos de Excel. En la primera publiqué un código para crear una gama de colores en gráficos con una única serie. En la segunda nota, ampliamos el código para gráficos con más de una serie.

El código de esta tercera nota permite señalar máximos y/o mínimos en gráficos de Excel. Los códigos anteriores se basan en los valores del eje de las categorías. Es decir, suponen que los valores de las series están ordenados, de mayor a menor o de menor a mayor, en el eje de la X.

El código que publico en esta nota, evalúa los puntos de la serie elegida, determina los puntos con los valores máximos y mínimos, y los rellena con el color elegido por el usuario. Éste, a su vez, puede elegir señalar sólo el máximo, sólo el mínimo o ambos.

Siguiendo con nuestro ejemplo


al seleccionar el gráfico y apretar el botón Aplicar, se abre un formulario donde podemos elegir qué serie formar,


 qué señalar y que color darle a nuestras elecciones (rojo, verde o azul)


y al elegir el Verde para el máximos obtenemos este resultado



El cuaderno con el ejemplo y el código puede descargarse aquí.

miércoles, septiembre 11, 2013

Formato condicional en gráficos de Excel - segunda nota

En la primer nota del tema mostré una macro para aplicar un formato condicional sencillo a un gráfico de Excel. Esa macro aplica el formato siempre a los puntos de la primer serie de datos del gráfico. Es decir, que si tenemos más de una serie de datos en nuestro gráfico, no podemos elegir a qué serie aplicar el formato.

En esta nota mostraré una macro que nos permite elegir la serie de datos a la cual queremos aplicar el formato. Recordemos que estamos hablando de un formato muy sencillo (una gama de colores combinado de izquierda a derecha) y que en notas posteriores trataremos el tema de señalar máximos y mínimos de una serie y el formato de acuerdo al valor del punto de la serie.

Empecemos por agregar una serie de datos a nuestro ejemplo que ahora muestra los saldos de las cuentas para los años 2011 y 2012



















Nuestra macro ahora evalúa cuantas series hay en el gráfico. Si hay más de una serie, se abre un formulario que nos permite elegir la serie a la cual queremos aplicar el formato






















Una vez elegida la serie, elegimos los parámetros del formato (ver la explicación en la nota anterior)























y obtenemos el resultado buscado


El cuaderno con el ejemplo y los códigos puede descargarse aquí. También pueden descargar este complemento e instalarlo en la máquina. Luego pueden crear un icono en la barra de acceso rápido para poder utilizarlo con comodidad en todo cuaderno.

martes, septiembre 10, 2013

Formato condicional en gráficos de Excel - primera nota

Excel no tiene un método incorporado para aplicar formato condicional en gráficos. En el pasado mostramos técnicas que nos permiten aplicar formatos dinámicos en gráficos. Pero formato condicional va más allá de eso.

Supongamos este gráfico, donde los puntos de la serie (cantidad de cuentas según saldo) están ordenados según la categoría (monto del saldo)


Ahora supongamos que queremos aplicar algo similar al formato condicional de manera que el color de las columnas donde las columnas tengan una gama de colores que vayan del del rojo para el primer punto (los saldos más negativos) al verde (los saldos más positivos). Es decir, esto:



Una posibilidad es hacerlo manualmente. El método manual tiene dos inconvenientes:

  • Es tedioso y cansador si se trata de muchos puntos
  • La elección de los colores de la gama es dificultosa


Como con toda tarea cansadora, aburrida y dificultosa, la solución es desarrollar una macro.

Mi solución se basa en la función RGB del Vba.

Algunas palabras sobre el tema. RGB significa (en inglés) Rojo (Red), Verde (Green) y Azul (Blue). La combinación de estos colores primarios de la luz permite generar una amplia gama de colores. Cada gama de estos colores está representado por un número que va de 0 (ausencia del color) a 255. La función RGB tiene tres argumentos, uno para cada color primario. Esta tabla muestra algunos ejemplos:


El cuaderno se puede descargar apretando el símbolo de Excel en la barra inferior de la imagen. Cambiando los números en el rango de valores (cualquier número entero entre 0 y 255) poderá verse en la columna "Color" el color resultante.

Este video muestra como RGB genera colores a medida que vamos cambiando aleatoriamente los valores de los argumentos



En esta primera nota mostraré una macro sencilla para formar los puntos de una serie en el gráfico con una gama de colores (rojo a verde, azul a rojo, etc.). Esta macro puede usarse para el  caso de un gráfico con una única serie de datos.
En las próximas notas veremos como transformar la macro para gráficos con más de una serie de datos y como adaptarla para señalar máximos y mínimos de una serie.

En esta macro hacemos los siguiente:
  1. Evaluamos si el objeto activo es un gráfico, en caso contrario aparecerá una advertencia pidiendo al usuario que elija un gráfico.
  2. Aparecerá un formulario donde el usuario debe señalar un valor inicial para cada color. Las posibilidades son "255" (empieza con este valor y se va reduciendo hasta cero); "0" (empieza en cero y va aumentando hasta 255); "255-K" (constante 255) y "0-K" (constante 0).
  3. Calculamos el "salto" de cada color dividiendo 256 por el número de puntos de la serie. Con este factor aumentamos o disminuimos el valor inicial del color en intervalos constantes. En caso de 255-K o 0-K, el valor es contante.
  4. Con un loop For...Next vamos generando los valores de la función RGB para cada punto y lo aplicamos al punto de la serie.
Este modelo consiste en una macro, un userform (formulario) con los controles para la elección de los colores y sus correspondientes eventos. Este video muestra como funciona la macro.



El cuaderno con el ejemplo y los códigos puede descargarse aquí. También pueden descargar este complemento e instalarlo en la máquina. Luego pueden crear un icono en la barra de acceso rápido para poder utilizarlo con comodidad en todo cuaderno.

Como señalo más arriba, en las próximas notas subire un código más completo (gráficos con más de una serie y posibilidad de señalar máximos y mínimos).


sábado, diciembre 29, 2012

JLD Excel – balance del sexto año y un gráfico interesante

Este blog cumple su sexto año de existencia. A lo largo de los años el número de lectores ha ido creciendo lo cual me llena de satisfacción. 2012 ha sido el año record en visitas y páginas vistas, más de 1,5 millón y más de 2.3 millones respectivamente.

Buscando como representar las estadísticas encontré en el excelente blog de Chandoo una nota sobre sobre la representación gráfica del precipicio fiscal de los Estados Unidos. Basándome en esa nota y en una posterior sobre un tema similar, he desarrollado este gráfico que muestra dinámicamente el número de páginas vistas en JLD Excel en los años 2007-2012



Este tipo de gráfico, permite una rápida comparación entre los años y ver cómo se ha ido desarrollando la popularidad del blog. La barra de desplazamiento permite señalar cada mes en particular, mostrando al mismo tiempo el número de páginas vistas.

Para crear este gráfico empecé por descargar la información sobre el número de visitantes y páginas vistas en el blog que llevo en el sitio StatCounter



Como puede apreciarse se tratan de datos diarios. Para poder crear nuestro gráfico tenemos que transformar estos datos a datos mensuales y anuales. Como ya habrán intuido la forma más eficiente de hacerlo es con tablas dinámicas



Ahora copiamos todo el contenido de la hoja y usamos Pegar Especial-Valores, para cancelar la tabla dinámica dejando sólo los valores.

El próximo paso es separar con una fila en blanco los años (para crear la separación en el gráfico) y agregar una serie de datos adicional en la columna D con esta fórmula

=SI(B2=$G$1,C2,NOD())



La celda $G$1 contiene el nombre del mes vinculado al valor de la barra de desplazamiento e identifica el mes a señalar (en la imagen el mes elegido es diciembre, por eso la celda D13 exhibe el valor de ese mes y el resto aparece con el valor #N#A; este valor de error no es representado en los gráficos).

Creamos un gráfico de área donde los valores del eje X (categorías) están en las columnas Ay B; los valores del área de cada año en la columna C y los valores del mes elegido en la barra de desplazamiento en la columna D.

Los valores de la serie de la columna D están representados con un gráfico de líneas.

La línea vertical que une el punto al eje de la X es una barra de error definida de esta manera



La barra de desplazamiento está ligada a la a la celda F2 en la hoja “motor”. Esta hoja contiene todos los datos del gráfico y todos los cálculos necesarios



Para calcular los acumulados en forma dinámica, tal como aparecen en el rango G5:G10 de la hoja “motor”, usamos esta fórmula

=SUMA(DESREF(INDICE($C$2:$C$78,COINCIDIR(F5,$A$2:$A$78,0)),,0,$F$2))

Finalmente creamos un cuadro de texto para cada año en el gráfico y lo ligamos a la celda con el acumulado



Este tipo de gráfico puede aplicarse a un sinnúmero de situaciones (ventas, eficiencia de servicios, etc.).

El archivo puede descargarse aquí.

Mis mejores de deseos de salud, paz y prosperidad en este nuevo año para todos mis lectores.

viernes, junio 15, 2012

Gráficos animados con Excel

En este blog ya hemos mostrado cómo crear gráficos interactivos (pueden ver las notas apretando el enlace Gráficos en la nube de etiquetas). Entendemos por gráficos interactivos aquellos donde el usuario puede cambiar el aspecto, las series y/o puntos de las series sin necesidad de acceder a la base de datos que alimentan el gráfico.

Podemos dar otro paso adelante y crear un gráfico animado, como éste



En este gráfico mostramos los cambios en la relación entre el real brasileño (BRL) y el dólar estadounidense (USD).

No me entusiasman particularmente los gráficos animados, pero en casos como éste, nos ayudan a ver o descubrir tendencias.

En esta nota vamos a mostrar cómo construirlo (el modelo se puede descargar aquí).

EL primer paso, por supuesto, es obtener los datos. En este ejemplo he obtenido los datos del sitio OANDA (datos históricos)



El segundo paso es construir el gráfico que en esta etapa será estático.



El próximo paso es agregar una barra de desplazamiento que nos permita ir cambiando los datos de la serie en el gráfico. En este caso usamos la barra de desplazamiento (scrollbar) de la colección de comandos ActiveX



En el cuadro de propiedades del control, definimos la celda B9 de la hoja “dinamico” como la celda ligada



A la celda B9 le hemos asignado el nombre “chrtCounter”.

En la celda B6 de la hoja “dinamico” ponemos el número de puntos que queremos que aparezcan en el gráfico. En nuestro caso hemos definido 30



A la celda le hemos asignado el nombre “chrtStep”.

Un último parámetro a definir para la barra de desplazamiento es el valor máximo. Nuestra serie tiene 366 puntos (valores); 30 aparecen en el gráfico así que el valor máximo de la barra de deslazamiento será 336 (para evitar que aparezcan puntos sin valor). Si la cantidad de puntos de la serie y el número de puntos a exhibir en el gráfico no varían, podemos poder una constante en la celda B7 (a la que le hemos asignado el nombre definido “chrtMaxScrollBar”).
Pero si queremos tener más control de las definiciones, usamos una fórmula para determinar dinámicamente el valor máximo. En la celda B7 ponemos:

=CONTAR(datos!$B$2:$B$367)-chrtStep

Excel no nos permite usar una referencia a la celda para definir el valor máximo de la barra de desplazamiento. Para hacerlo programamos el evento ScrollBar1_Change()

Private Sub ScrollBar1_Change()
    ScrollBar1.Max = Range("chrtMaxScrollBar")
End Sub


Ahora tenemos que definir nombres que se refieran dinámicamente a los puntos de la serie de datos y a la categoría (los valores del eje de las X). Creamos dos nombres:

- Para los puntos de la serie de datos

chrtSeries =DESREF(datos!$C$2,chrtCounter,0,12+chrtStep,1)

- Para los puntos del eje de las X

chrtCategory =DESREF(datos!$B$2,chrtCounter,0,1+chrtStep,1)

Ambos nombres se refieren a fórmulas que usan la función DESREF para determinar el rango de valores a mostrar de acuerdo a los valores que el usuario haya asignado a la barra de desplazamiento.
Cada vez que el usuario pulsa la barra de desplazamiento, el valor de la celda ligada (chrtCounter) cambia.



Para que estos cambios se reflejen en el gráfico remplazamos los rangos de la función SERIES del gráfico con los nombres definidos. Seleccionamos el gráfico y usamos el menú “seleccionar origen de datos-editar” para remplazar la referencia fija al rango por el nombre que se refiere al rango dinámico



A esta altura de los acontecimientos podemos lograr la animación sencillamente arrastrando el marcador de la barra de desplazamiento (como se ve en el video). Pero en nuestro caso usamos una macro para disparar la animación y otra para volver el gráfico al punto de partida. Estas macros están ligadas a los botones con los símbolos “>>” y “<<” grafAnim07 Todo lo que hace la macro para animar el gráfico es cambiar el valor de “chrtCounter”


Sub animate_Chart()
    Dim iX As Integer, Delay As Single, Start As Single
   
    'fijar valores del eje Y del grafico
    Call fix_Y_Values
   
    Range("chrtCounter") = 0
   
    For iX = 0 To Range("chrtMaxScrollBar")
        Range("chrtCounter") = Range("chrtCounter") + 1
            Delay = 0.1
            Start = Timer
            Do While Timer < Start + Delay
                DoEvents
            Loop
    Next iX
   
End Sub



Para volver el gráfico a la situación inicial sencillamente fijamos el valor de “chrtCounter” a 0

Sub backTo0()
    Range("chrtCounter") = 0
End Sub



El ultimo detalle es fijar el valor mínimo y máximo del eje de las Y. Podemos usar constantes, pero mejor es determinar estos valores en forma dinámica usando estas fórmulas

Para el valor mínimo (chrtXmin): =MULTIPLO.INFERIOR(MIN(datos!$C$2:$C$367),0.1)

Para el valor máximo(chrtXmax): =MULTIPLO.SUPERIOR(MAX(datos!$C$2:$C$367),0.1)

Estos valores se fijan al empezar la macro de la animación con la rutina Call fix_Y_Values

Private Sub fix_Y_Values()
   
    ActiveSheet.ChartObjects("chrtUSDBRL").Activate
    With ActiveChart
        .Axes(xlValue).MinimumScale = Range("chrtXmin")
        .Axes(xlValue).MaximumScale = Range("chrtXmax")
    End With
   
    Range("A1").Select
   
End Sub


El cuaderno con el ejemplo se puede descargar aquí.

sábado, mayo 12, 2012

Gráfico de columnas con formato dinámico

Al presentar datos en forma gráfica suele surgir la necesidad de resaltar uno o varios puntos de una serie.

Supongamos esta situación: presentamos las ventas de un año y queremos resaltar los mese en los que las ventas han caído por debajo de un cierto límite.



En el gráfico del ejemplo podemos ver con facilidad en qué meses las ventas han caído por debajo de límite establecido. Si se trata de un gráfico estático, donde los datos no cambian, nos basta con dar formato a los puntos de la serie en cuestión.

Pero si queremos mostrar distintos escenarios, cambiando el valor del límite por ejemplo, tenemos que convertir nuestro gráfico en dinámico. Es decir, que el color de los puntos de la serie cambie de acuerdo a la relación al valor del límite.

El principio básico para lograr este tipo de gráfico es separar los puntos de la serie (los meses) en dos series: por encima y por debajo del límite. Esto lo haceos creando un tabla auxiliar en una rango oculto



Los valores de la columna B (sobre el límite) los calculamos con la fórmula:

=SI(F5>=$F$2,F5,NOD())

Los valores de la columna C (debajo del límite) con:

=SI(F5<$F$2,F5,NOD()) 

Al representar vemos dos detalles “indeseables” en el gráfico:


  1. El formato numérico del eje de las Y 
  2. Las columnas no están ordenadas en forma simétrica. 



El primer detalle lo corregimos usando formato personalizado para los valores del eje



Este formato presenta los valores por miles: ###,###, "M";(###,###,)" M";0

El segundo problema se debe a que estamos representando dos series de datos en el gráfico de manera que para cada mes hay dos valores. Este problema lo solucionamos asignando una de las series al eje Y secundario



Al hacerlo so nos presenta un tercer problema: las escalas de los ejes Y no coinciden!



Podemos corregir esto manualmente con el menú de formato del eje. Pero al volver a cambiar el valor del límite o cualquier otro dato, no enfrentaremos con el mismo problema. Una solución es fijar los valores de ambos ejes. Una solución más general es programar un evento que corrija el valor del eje secundario de manera que siempre coincida con el primario.

Empezamos por definir un nombre que se refiera al rango de los datos (rngDatos en nuestro ejemplo se refiere a la celda que contiene el límite y a las celdas con los valores de las ventas).



También cambiamos el nombre por defecto del objeto gráfico (Gráfico 1) usando el Panel de Selección



En el módulo Vba de la hoja ponemos este código


Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngActCell As Range

    Application.ScreenUpdating = False
   
    If Union(Target, Range("rngVentas")).Address = Range("rngVentas").Address Then
   
    Set rngActCell = ActiveCell
   
     ChartObjects("grfVentas").Activate
        ActiveChart.Axes(xlValue, xlSecondary).MaximumScale = _
                ActiveChart.Axes(xlValue, xlPrimary).MaximumScale
   
    rngActCell.Select
   
    End If
   
    Application.ScreenUpdating = True
   
End Sub





Un último paso es ocultar el eje secundario



El archivo del ejemplo se puede descargar aquí.

domingo, enero 29, 2012

Gráfico Big Mac dinámico en Excel

La publicación británica The Economist publica desde hace varios años el índice Big Mac. El Big Mac Index (o Índice Big Mac, en español) es un índice elaborado a partir de una investigación no científica, que permite comparar el poder adquisitivo de distintos países donde se vende la hamburguesa Big Mac de McDonald's (citado de Wikipedia).

El diario argentino La Nación publicó este gráfico que muestra la diferencia del precio del Big Mac en relación al valor en los Estados Unidos



Este gráfico fue construido con la aplicación Tableau.

Como ya habrán intuido, la pregunta es: ¿se puede hacer con Excel?

Veamos qué elementos incluye:

• Gráfico de barras por país
• Controles que permiten visualizar los países por continente
• Los colores de las barras representan el valor (diferencias positivas en rojo, diferencias negativas en verde)

La tabla de datos es la siguiente



Empezamos por ordenar la tabla en orden ascendente según el campo Porcentaje; seleccionamos los campos “País” y “Porcentaje” para construir este gráfico de barras



Este es el gráfico de barras estándar de Excel con unas pocas modificaciones: quitamos las líneas de cuadrícula, fijamos las etiquetas del eje vertical en “bajo” y en formato de series de datos—relleno marcamos la opción “variar colores entre puntos”.

Este gráfico es una primera aproximación. Para poder agregar los elementos dinámicos y los calores del gráfico original tendremos que hacer algunas transformaciones.

Una segunda aproximación es usar una tabla dinámica para generar un gráfico dinámico que muestre sólo los países de los continentes elegidos



Lo que hemos hecho es generar una tabla dinámica y un gráfico dinámico basada en ella; la tabla está en la filas 3 a 27 que hemos ocultado, dejando visible sólo el campo de filtro del informe dinámico. Además hemos agregado una segmentación de datos para mostrar cuáles son los continentes elegidos



Pero para crear un gráfico como el publicado en La Nación tendremos que usar Vba (macros) y controles.
Esto es lo que queremos crear:



La anatomía del modelo es la siguiente:



1 – Controles: insertamos 7 casillas de verificación (de la colección de controles de hoja, no ActiveX) y los ligamos a las celdas en el rango B3:B9. Cuando se señala el control, la celda correspondiente muestra VERDADERO; en caso contrario mostrará FALSO. Usaremos estos valores en las macros que controlan los puntos mostrados en el gráfico.

2 – Celda de control: la celda B11 (el nombre Dimension_del_array se refiere a esta celda), cuenta cuantos controles han sido señalados, es decir, cuantos continente queremos mostrar en el gráfico. Cuando el valor es 6, significa que hemos elegido todos los continentes. También esta celda la usaremos en nuestras macros.

3 – Macros: programamos dos macros para ocultar o mostrar datos con Autofiltro en la tabla delos datos, una que responde a las elecciones de los controles excepto el control “Todos”, la segunda para el caso que el usuario señale la casilla “Todos”

El código de la primer macro es

Sub select_series()

    Dim strContinentes() As String
    Dim iR As Integer
    Dim iCounter As Integer
  
    If Range("Dimension_del_array") = 6 Then
        Range("Todos") = True
    Else
        Range("Todos") = False
    End If

    'redimensionar el array
    ReDim strContinentes(Range("Dimension_del_array"))
  
    iCounter = 0
  
    With Sheets("grafico dinamico")
    For iR = 4 To 9
        If .Cells(iR, 2) Then
                strContinentes(iCounter) = .Cells(iR, 1)
                iCounter = iCounter + 1
        End If
    Next iR
  
    Sheets("datos").Range("$A$1:$C$24").AutoFilter Field:=1, _
                Criteria1:=strContinentes, Operator:=xlFilterValues
  
    End With
    
End Sub



La segunda macro, para el caso que se haya elegido la casilla “Todos” es

Sub all_Continents()
    Dim iR As Integer
  
    'si se elige Todos
    With Sheets("grafico dinamico")
    If Range("Todos") Then
        For iR = 4 To 9
            .Cells(iR, 2).Formula = True
        Next iR
    Else
        For iR = 4 To 9
            .Cells(iR, 2).Formula = False
        Next iR
    End If
    End With

    Call select_series
        
End Sub



En este modelo usamos una única serie de valores, por eso para ocultar algunos de los puntos de la serie con Autofiltro (los países de los continentes que no hemos elegido) nos aprovechamos de la propiedad de los gráficos de no mostrar los valores de celdas ocultas.

El control “Todos” está asociado a la macro “all_Continents”



A los demás controles les hemos asignado la macro “select_series”.

Este modelo puede adaptarse a muchos escenarios.

El cuaderno puede descargarse, sin cargo, aquí (usar el enlace Descargar en la parte inferior de la página). Quien esté interesado en una explicación detallada del modelo y la contraseña para acceder a los códigos, puede descargar el manual (tiene un costo de 5 Euros).

domingo, diciembre 18, 2011

Usos del panel de selección en Excel

Una de las tareas más extenuantes cuando construimos reportes dinámicos o dashboards, es ordenar los objetos gráficos (cuadros de texto, formas, imágenes, gráficos, etc.).

Para ordenar los objetos debemos seleccionarlos, cosa que hasta Excel 2007 hacíamos seleccionando uno de los objetos y luego, apretando el botón Ctrl, seleccionando los restantes.

A partir de Excel 2007 disponemos de una nueva herramienta: el panel de selección



El panel aparece cuando seleccionamos un objeto, en la ficha “Herramientas de dibujo”, o en cuando seleccionamos un gráfico, en la ficha “Herramientas de gráficos”



El panel de selección tiene muchos usos prácticos

Volver visibles formas ocultas



En la imagen vemos que existe el objeto “Flecha izquierda y derecha” pero no es visible (el cuadro a la derecha del nombre del objeto en el panel indica si está visible, se ve un ojo en el cuadro, o no). Un simple clic en el cuadro al lado del nombre del objeto lo descubre o lo oculta



Uno de los usos de esta propiedad es hacer visible objetos que pueden contener enlaces a otros cuadernos o cambiar logos de facturas hechas en hojas de Excel.

Selección objetos

Podemos seleccionar los objetos en el panel haciendo un clic sobre el nombre del objeto elegido; podemos seleccionar varios objetos manteniendo apretada la tecla Ctrl mientras los seleccionamos. Una vez seleccionados podemos cambiar reordenarlos usando las flechas de reordenar.

Con los objetos seleccionados podemos hacer varias operaciones como:

Agrupar

Agrupando hacemos que varios objetos se comporten como si fueran un único objeto



Ajustar a la cuadrícula

Al activar esta propiedad, al mover o cambiar el tamaño de los objetos, éstos se alinean al borde de celda más cercano



Ajustar a la forma

En forma similar, esta propiedad permite alinear las formar a los bordes de las otras formas.

Otras posibilidades pueden verse son alinear en la parte superior o inferior y distribuir vertical u horizontalmente



En este ejemplo hemos agrupado un gráfico (ventas de dos años por meses) que incluye controles (la barra de desplazamiento y las casillas de verificación) lo que nos permite mover todo el grupo en la hoja o cambiar el tamaño sin necesidad de tener que tratar cada objeto por separado



El archive con el ejemplo se puede descargar aquí.

domingo, diciembre 11, 2011

Gráfico dinámico con lista desplegable - segunda nota

En la nota anterior mostramos un modelo sencillo para crear un gráfico dinámico según el valor elegido de una lista desplegable. Señalamos en esa nota alguna de sus limitaciones: la escalabilidad. Si bien esta palabra no figura en el diccionario de la Real Academia Española, Wikipedia la define como " la capacidad del sistema informático de cambiar su tamaño o configuración para adaptarse a las circunstancias cambiantes”.

Si queremos usar este tipo de reporte a lo largo del tiempo, agregando datos, tenemos que crear un modelo dinámico.
Excel permite hacer esto con facilidad, pero para lograrlo tenemos que organizar nuestro modelo en una forma distinta. El principio básico es separar los datos de los cálculos y de la presentación del reporte (en nuestro caso, el gráfico y la matriz de ventas)



Nuestra base de datos está en la hoja “BD”. El rango de los datos está definido como tabla. Todos los objetos o fórmulas que se refieren a la tabla se adaptan automáticamente a los cambios en los datos de ésta. Esto nos libera de la necesidad de crear rangos dinámicos con DESREF o INDICE.

En la hoja “cálculos” creamos nuestro “motor”. Este consiste en una tabla dinámica que resume los datos de la base de datos



La hoja reporte resume los datos en una tabla que nos servirá también para crear el gráfico dinámico



En la celda C3 ponemos una lista desplegable con los nombres de los vendedores; en la celda C4 una lista desplegable con los años disponibles. Los valores de estas listas están definidos con nombres que se refieren a rangos en la hoja “auxiliar”.

Para poner los datos de la tabla en forma dinámica usamos la función IMPORTARDATOSDINAMICOS,



Para crear la función con facilidad, definimos en Opciones de la tabla dinámica la opción “Generar GetPivotData”



Este video muestra el funcionamiento del modelo



Un último toque. Las tablas dinámicas no se actualizan automáticamente. En esta nota muestro una técnica para lograr la actualización automática de tablas dinámicas.

El archivo con el modelo se puede descargar aquí.

sábado, diciembre 10, 2011

Gráficos dinámicos según valor de lista desplegable

Los más memoriosos lectores de este blog recordarán seguramente aquella nota que describía la técnica para crear un gráfico interactivo según el valor de la celda activa (la nota completa aparece en mi blog sobre gráficos, actualmente inactivo). También recordarán que esa técnica no funciona en las versiones posteriores a Excel 2003.

En esta nota mostraré una técnica que funciona con todas las versiones de Excel. El modelo es distinto y se basa en los valores de una lista desplegable. En esta nota mostraré un modelo sencillo y señalaremos sus limitaciones. En las próximas notas veremos otras soluciones que superaran esas limitaciones.

Y yendo al grano, supongamos esta matriz que muestra las ventas por trimestres de los vendedores de una firma



Queremos crear un modelo que permita representar en gráfico las ventas por vendedor, eligiéndolos de una lista desplegable. Las técnicas para lograr esto ya han sido expuestas en este blog en el pasado, por lo que haremos una explicación sucinta.

Lo que queremos lograr es esto:



Lo primero es crear un nombre que se refiera al rango que contiene los nombres de los vendedores. Lo hacemos fácilmente usando la opción “crear desde la selección” del grupo “nombres definidos” en el menú “Fórmulas”



Creamos la lista desplegable en la celda C5 y definimos el nombre “grfTitulo” que se refiere a esta celda. Para crearlo usamos el cuadro de nombres (seleccionamos al celda, escribimos el nombre en el cuadro y apretamos Enter)



Ahora definimos un nombre para cada uno de los rangos que contienen las ventas de los distintos vendedores. Esto también lo haremos usando la opción “crear desde la selección”



Ahora podemos usar los nombres de los vendedores para definir los rangos de los valores que queremos ver en el gráfico. Pero aquí se nos presenta un problema. Dado que los espacios no están permitidos en los nombres definidos, Excel crea los nombres poniendo un “_” (underline) entre el nombre y el apellido. El valor que obtenemos de la lista desplegable no contiene el guión. La solución es transformar el valor obtenido de la lista desplegable agregándole el guión. Esto la hacemos con la función SUSTITUIR en una celda oculta (en este ejemplo en la celda A5)



El próximo paso es crear un gráfico, de líneas en nuestro caso, usando la primer fila de la tabla



Para que nuestro gráfico sea dinámico creamos este nombre definido

grfSeriesX =INDIRECTO(reporte!$A$5)

La función INDIRECTO interpreta el texto en la celda A5 y lo convierte en el rango que hemos definido previamente.

Ahora reemplazamos los rangos en la función SERIES del gráfico de la siguiente manera



Para ver los nombres definidos apretamos F3.

Nuestro modelo funciona de la siguiente manera:


  • Elegimos un valor de la lista deplegable
  • El valor es transformado en la celda A5
  • La función INDIRECTO en el nombre grfSeriesX lo transforma en el rango del vendedor elegido
  • El nombre grfTitulo pone el rango que contiene el nombre del vendedor de manera que aparezca en el título del gráfico.


Este modelo tiene varias limitaciones; la más grave es que si agregamos trimestres y/o vendedores tenemos que modificar los nombres definidos. Podemos, por supuesto, crear nombres dinámicos con DESREF o INDICE como ya hemos mostrado en varias oportunidades en este blog. Pero hay soluciones mejores que mostraremos en las próximas notas.

El archivo con el ejemplo se puede descargar aquí.