martes, marzo 11, 2008

Gráficos enlazados en Excel

Esta nota se originó en la consulta de uno de mis lectores:

tengo la necesidad de hacer una serie de gráficos de columnas para los cuales me gustaría utilizar la técnica conocida como "drill down" que consiste en por ejemplo al hacer doble click sobre la barra de un gráfico, por ejemplo gastos de marzo, me lleve a la gráfica detallada de cada uno de los gastos de ese mes en particular

No se que término utilizar en castellano para traducir "drill down", así que hasta que alguien sugiera algo más acertado usaremos gráficos enlazados.

Empecemos por describir nuestro modelo. Tenemos un cuaderno con seis hojas: Total, con dos tablas. En la superior resumimos las ventas de todo el año de las cuatro zonas de una empresa (Norte, Sur, Este y Oeste), y en la inferior tenemos el detalle de cada zona por mes.




A partir de las tablas hemos creado cinco gráficos que hemos puesto en distintas hojas.



Nuestro objetivo es que cuando hagamos clic a una de las columnas del gráfico Total, nos lleve al gráfico detallado de la zona correspondiente.

Esto la haremos usando eventos, tema que ya he tratado en mi blog sobre Excel.

Excel permite programar también eventos relacionados con gráficos. En nuestro caso usaremos el programaremos el evento Chart_MouseDown. Este evento es disparado cuando el Mouse está ubicado sobre un gráfico y un botón es presionado.

En el editor de Vba, seleccionamos la hoja Grafico Total y en la ventanilla izquierda del módulo elegimos Chart y en la ventanilla derecha el evento Mouse Down



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

Private Sub Chart_MouseDown(ByVal Button As Long, ByVal Shift As Long, _
ByVal x As Long, ByVal y As Long)

Dim ElementID As Long, Arg1 As Long, Arg2 As Long


GetChartElement x, y, ElementID, Arg1, Arg2
If ElementID = xlSeries Then
Select Case Arg2
Case 1
Sheets("Grafico Norte").Activate
Case 2
Sheets("Grafico Sur").Activate
Case 3
Sheets("Grafico Este").Activate
Case 4
Sheets("Grafico Oeste").Activate
End Select
End If
End Sub

Lo que hace este código es determinar sobre qué elemento del gráfico se encuentra al Mouse al apretar el botón. De acuerdo a la ubicación, el código activa la hoja correspondiente.

He agregado dos eventos en cada una de las hojas con los gráficos detallados. Al activar la hoja se recibe un mensaje que nos informa que un doble clic nos llevará de vuelta al gráfico Total. El segundo evento nos lleva al gráfico Total al hacer doble clic.



Como verán, a lo largo de esta nota he considerado gráficos ubicados en hojas separadas. Para usar eventos en caso de gráficos que residen en hojas de cálculo de Excel, tenderemos que usar otra técnica basada en Class Modules. Pero esto será el tema de la próxima nota.

2 comentarios:

Horacio dijo...

Jorge, en primer lugar, muy agradecido por tu solución ya que me será de mucha utilidad.
Por otro lado "drill down" es un mecanismo para ampliar la información que muestra un gráfico o una tabla y consiste en "taladrar" o "profundizar"(Drill) sobre el mismo.
Excelente página. Te felicito. Un saludo. Horacio.

Palel dijo...

excelente, como siempre.
Sólo me resulta molesto el tema de la ventana de aviso, por tanto, una vez conocido el prodecimiento, mejor eliminar el evento que genera dicha ventana :-)
Muchas gracias, Jorge.