Botones para seleccionar series (rango de datos) y tipo de gráfico

Abra el archivo Graficos01c.xlsm haciendo clic aquí

Lo que hicimos en la sesión anterior, permite elegir una serie cualquiera de las 5 que se dispone en los datos y generar un gráfico de tipo barras. Añadimos también algunas propiedades para una mejor presentación del mismo. Siempre realiza el mismo tipo de gráfico.

Lo que ahora queremos hacer es, elegir la serie (lo que ya está implementado) y luego seleccionar el tipo de gráfico que se desee.

Esto significa que, el botón de cuadro combinado anterior, que permitía realizar el gráfico al seleccionar la serie, ahora sólo seleccionará la serie, dejará el número de elemento seleccionado en A2 y, al seleccionar el tipo de gráfico de otro cuadro combinado, recogerá el número de A2 y generará el gráfico según las dos necesidades.

Para ello, ya hemos puesto la lista de los nombres de los principales tipos de gráficos en Z2:Z12 y en Z1 está el nombre de rango de esta lista: TpoGraff.

Empecemos insertando otro botón de cuadro combinado de control de formulario de la cinta de bandas Controles de la ficha Programador o Desarrollador. Trace un recuadro en I2. No asigne niguna macro y desactive la selección. Ahora haga clic con el botón derecho; debe obtenerse un menú emergente de la cual se debe seleccionar [Formato de control] De ella, y al soltar el botón, en la ventana emergente, digite TipoGraff en [Rango de entrada], en [Vincular con la celda] digite I2 luego clic en [Aceptar].

Ahora vamos al Editor usando + F11. Doble clic en [Módulo1] de la ventana de proyectos y al final del primer procedimiento (construido en la sesión anterior), ingrese el nombre de nuestro procedimiento: Sub GrafferDat()

Empezamos definiendo instancias de los nombres de rango de las series

Dim nSerie As Range
Set xEje = Range("Meses")
Set s1 = Range("Milpo")
Set s2 = Range("Atacocha")
Set s3 = Range("Raura")
Set s4 = Range("Buenaventura")
Set s5 = Range("Centromin")

Depositamos en iX el número de la serie seleccionado y en iG el número de tipo de gráfico seleccionado:

iX = Range("A2")
iG = Range("I2")

Dependiendo de la serie seleccionada, guardamos en sName el nombre de la serie para el título.

Select Case iX
Case 1: sName = "Milpo"
Case 2: sName = "Atacocha"
Case 3: sName = "Raura"
Case 4: sName = "Buenaventura"
Case 5: sName = "Centromin"
End Select

En la hoja activa (Hoja1), añadimos un nuevo gráfico (Graph.Add … añadiría una nueva hoja de gráfico). En nuestro caso insertamos en la hoja de datos.

ActiveSheet.Shapes.AddChart.Select

Estando activo el gráfico (en blanco) añadido, definimos el tipo de gráfico según el número (iG) seleccionado:

With ActiveChart
Select Case iG
Case 1
.ChartType = xlColumnClustered
Case 2
.ChartType = xlColumnStacked
Case 3
.ChartType = xl3DColumnClustered
Case 4
.ChartType = xl3DColumnStacked
Case 5
.ChartType = xl3DColumn
Case 6
.ChartType = xlLine
Case 7
.ChartType = xlLineStacked
Case 8
.ChartType = xl3DLine
Case 9
.ChartType = xlPie
Case 10
.ChartType = xl3DPie
End Select

Estando activo el gráfico añadido, seleccionamos el rango de datos (serie) a ser graficado; el número de la serie está en iX.

With ActiveChart
Select Case iG
Case 1
.ChartType = xlColumnClustered
Case 2
.ChartType = xlColumnStacked
Case 3
.ChartType = xl3DColumnClustered
Case 4
.ChartType = xl3DColumnStacked
Case 5
.ChartType = xl3DColumn
Case 6
.ChartType = xlLine
Case 7
.ChartType = xlLineStacked
Case 8
.ChartType = xl3DLine
Case 9
.ChartType = xlPie
Case 10
.ChartType = xl3DPie
End Select

Estando activo el gráfico, añadimos algunas características de los gráficos que, en algunos casos no funcinará:


Selection.Caption = "Valor medio de acciones de " + sName
.FullSeriesCollection(1).XValues = xEje
.SetElement msoElementDataLabelShow
.Axes(xlSeries).Select
Selection.Delete
Damos por terminamos el uso de With.

Y nuestra macro termina blanqueando las celdas A2 e I2 donde estaban los números de serie y tipo de gráfico, respectivamente.

Range("A2") = ""
Range("I2") = ""
End Sub

Estando en el ambiente del Excel, botón derecho en el botón cuadro combinado para el tipo de gráfico, , de la ventana que se emita, seleccione la macro GrafferDat y clic en [Aceptar].

Ahora pasamos a grabar el libro con el nombre Graficos01d.xlsm, habilitado para macros.

Probemos la macro:

Usando el botón de A2, seleccione una serie cualquiera, usando el botón de los tipos de gráficos, seleccione un tipo cualquiera. Al soltar este botón debe aparecer la gráfica elegida, para la serie elegida.

Una pregunta:

¿Cómo debe modificar nuestra macro a fin de que permita graficar dos o más series en el mismo gráfico?

Lo dejamos para ser resuelto.
El libro con esta nueva macro lo puede ver haciendo clic aquí

Esta es la macro completa y limpia

Sub GrafferDat()
Dim nSerie As Range
Set xEje = Range("Meses")
Set s1 = Range("Milpo")
Set s2 = Range("Atacocha")
Set s3 = Range("Raura")
Set s4 = Range("Buenaventura")
Set s5 = Range("Centromin")
iX = Range("A2")
iG = Range("I2")
Select Case iX
Case 1: sName = "Milpo"
Case 2: sName = "Atacocha"
Case 3: sName = "Raura"
Case 4: sName = "Buenaventura"
Case 5: sName = "Centromin"
End Select
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
Select Case iG
Case 1
.ChartType = xlColumnClustered
Case 2
.ChartType = xlColumnStacked
Case 3
.ChartType = xl3DColumnClustered
Case 4
.ChartType = xl3DColumnStacked
Case 5
.ChartType = xl3DColumn
Case 6
.ChartType = xlLine
Case 7
.ChartType = xlLineStacked
Case 8
.ChartType = xl3DLine
Case 9
.ChartType = xlPie
Case 10
.ChartType = xl3DPie
End Select
Select Case iX
Case 1
.SetSourceData Source:=s1
Case 2
.SetSourceData Source:=s2
Case 3
.SetSourceData Source:=s3
Case 4
.SetSourceData Source:=s4
Case 5
.SetSourceData Source:=s5
End Select
.SetElement (msoElementChartTitleAboveChart)
Selection.Caption = "Valor medio de acciones de " + sName
.FullSeriesCollection(1).XValues = xEje
.SetElement msoElementDataLabelShow
.Axes(xlSeries).Select
Selection.Delete
End With
Range("A2") = ""
Range("I2") = ""
End Sub
 

La siguiente imagen muestra parte de este procedimiento

En la siguiente sesión completaremos la otra parte que corresponde a seleccionar el tipo de gráfico deseado y la serie para luego trazar el gráfico.

Vaya a la siguiente sesión haciendo aquí