viernes, 3 de agosto de 2012

VBA: Mostrar/Ocultar Series de un gráfico en Excel.

En el post de hoy veremos un sencillo código de VBA, donde un procedimiento Sub nos mostrará u ocultará las Series de un gráfico, insertado en una hoja de cálculo de Excel.
La cuestión la planteó un lector a través de un comentario:

......tengo tres series de valores en tres columnas (5 valores por columna, y tengo un grafico de la primera columna vs la segunda y la tercera. En la sexta fila de ls columnas dos y tres tengo una lista desplegable con las opciones SI y NO, y quiero que cuando en la lista se seleccione la opcion SI los valores de la columna correspondientes aparezcan en la grafica en caso contrario que no aparezcan en la grafica...

De manera similar a la que plantea el lector, disponemos un origen de datos y un gráfico de columnas ya generado:

VBA: Mostrar/Ocultar Series de un gráfico en Excel.


Como vemos en la imagen, en las celdas B6:D6, tenemos celdas con una Validación de datos tipo lista, con valores Sí / No. Estos valores, siguiendo las indicaciones del lector, serán los que nos servirán para elegir si queremos o no Mostrar u Ocultar las Series en el Grafico.
He decidido ejecutar la macro de Excel asignándola a un botón, aunque podemos optar por cualquier otro método.

Insertaremos el siguiente código en un Módulo en la Ventana del Explorador de proyectos del Editor de VBA, formando nuestra macro de Excel:

Sub MostrarSeries()
'Activamos el gráfico, previamente creado.
ActiveSheet.ChartObjects("1 Gráfico").Activate
'Nos aseguramos que es de tipo Columnas
ActiveChart.ChartType = xlColumnClustered
'y siempre para empezar, damos el rango completo como Fuente para construir el gráfico
ActiveChart.SetSourceData Source:=Range("A1:D5")

'Ahora condicionamos Mostrar o Eliminar cada una de las tres series del gráfico
'al valor de las celdas B6:D6
If Range("B6") = "Sí" Then
ActiveChart.SeriesCollection("Año2010").Values = Range("B2:B5")
ElseIf Range("B6") = "No" Then
ActiveChart.SeriesCollection("Año2010").Delete
End If
If Range("C6") = "Sí" Then
ActiveChart.SeriesCollection("Año2011").Values = Range("C2:C5")
ElseIf Range("C6") = "No" Then
ActiveChart.SeriesCollection("Año2011").Delete
End If
If Range("D6") = "Sí" Then
ActiveChart.SeriesCollection("Año2012").Values = Range("D2:D5")
ElseIf Range("D6") = "No" Then
ActiveChart.SeriesCollection("Año2012").Delete
End If

End Sub


Ya podemos comprobar nestra macro de Excel, modificamos alguna de las celdas B6:D6, y ejecutamos:

VBA: Mostrar/Ocultar Series de un gráfico en Excel.

No hay comentarios:

Publicar un comentario en la entrada