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
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,
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í