Bueno, ahora realizaremos una mejora sobre la creación de gráficos con macros (parte 1)
En la primera parte vimos la creación de un solo gráfico, ahora imaginemos que se tienen que crear varios gráficos, los cuales deseamos que aparezcan ordenados y con un espaciado uniforme entre ellos, los datos de ejemplo podrían ser como se muestra a continuación:
Ahora en el código de incorpora un FOR para la cantidad de gráficos que se van a crear, para fines de simplificar el ejemplo asumamos que todos los gráficos deben estar en la misma hoja.
Como resultado de la ejecución obtendremos lo siguiente:
Naturalmente cuando se trata de solo un gráfico el uso de la macro para ello podría considerarse trivial, sin embargo ahora comienza a hacerse necesario a fin de generar siempre el mismo formato para todos los gráficos, la necesidad de utilizar la macro se hace mas notoria cuanto mayor sea el número de gráficos a ser generados.
En un próximo ejemplo incluiremos algunos mejorar mas sobre este ejemplo.
19/09/2012 a las 12:09 pm
hola me gustaria saber cual es la parte del codigo donde pones q se ordenen las graficas una debajo de la otra y como puedo cambiar el tamaño ala grafica por codigo yo tengo el sig. codigo que grafica pero la graficame la la ase muy chiquta y me grafica una sobre otra. anexo el codigo aunque esta muy personalizada a cierto formato que tengo pero solo me falta eso que te explico arriva. gracias de antemano
Sub crear_grafico()
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Pasamos a una variable la celda donde estamos,
'para volver a ella al finalizar el macro
celda_donde_estamos = ActiveCell.Address
'Vamos al principio del rango de datos
'(celda de arriba a la izquierda).
'Mejor usar esto, que CurrentRegion:
If ActiveCell.Row 1 Then
If ActiveCell.Offset(-1, 0) "" Then
Selection.End(xlUp).Select
End If
End If
If ActiveCell.Column 1 Then
If ActiveCell.Offset(0, -1) "" Then
Selection.End(xlToLeft).Select
End If
End If
'Pasamos la celda inicial (donde estamos ahora)
celda_inicial = ActiveCell.Address
'si la celda está vacía, no creamos el gráfico
If celda_inicial = "" Or IsEmpty(ActiveCell) Then
mensaje = MsgBox("No hay datos para crear el gráfico. ", vbInformation, "Imposible crear gráfico")
Exit Sub
End If
'Pasamos a una variable, el nombre de la hoja
nombre_de_la_hoja = ActiveSheet.Name
'Pasamos a una variable, el área de datos para el gráfico
area_de_datos = Range(celda_inicial).CurrentRegion.SpecialCells(xlVisible).Address
'Creamos el gráfico
Charts.Add
'Informamos del tipo de gráfico que deseamos
ActiveChart.ChartType = xlLineStacked
'Seleccionamos el área de datos para montar el gráfico
ActiveChart.SetSourceData Source:=Sheets(nombre_de_la_hoja).Range(area_de_datos), PlotBy:=xlColumns
'Creamos el gráfico en la hoja donde estamos
ActiveChart.Location Where:=xlLocationAsObject, Name:=nombre_de_la_hoja
'Cambiamos el título del gráfico
With ActiveChart
.HasTitle = True
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).HasTitle = True
End With
With ActiveChart
.SeriesCollection(1).Select
Selection.Delete
.SeriesCollection(1).Select
Selection.Delete
.SeriesCollection(3).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
End With
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
'Quitamos la leyenda
ActiveChart.SeriesCollection(2).Select
ActiveChart.SeriesCollection(2).AxisGroup = 2
With ActiveChart
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MinimumScale = 1.2
.Axes(xlValue).MaximumScale = 3
.Axes(xlValue).MaximumScale = 3
.Axes(xlValue).MajorUnit = 0.5
.Axes(xlValue).MajorUnit = 0.2
End With
With ActiveChart
.Axes(xlValue, xlSecondary).MinimumScale = 270
.Axes(xlValue, xlSecondary).MinimumScale = 80
.Axes(xlValue, xlSecondary).MaximumScale = 360
.Axes(xlValue, xlSecondary).MaximumScale = 440
.Axes(xlValue, xlSecondary).MajorUnit = 10
.Axes(xlValue, xlSecondary).MajorUnit = 40
End With
ActiveChart.HasLegend = True
ActiveChart.SeriesCollection(4).Select
ActiveChart.SeriesCollection(4).AxisGroup = 2
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "y2"
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "y"
ActiveChart.ChartTitle.Text = "Profile"
ActiveChart.SetElement (msoElementSecondaryValueAxisTitleRotated)
ActiveChart.Axes(xlValue, xlSecondary).AxisTitle.Text = _
"date"
'Ponemos tamaño 8 para el eje Y
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlValue).HasMajorGridlines = True
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Size = 12
End With
'Ponemos tamaño 8 para el eje X
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Size = 12
End With
'Ponemos el título en negrita
ActiveChart.ChartTitle.Select
Selection.Font.Bold = True
'Volvemos a la celda donde estábamos inicialmente
Range(celda_donde_estamos).Select
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub
11/11/2012 a las 11:54 am
esta funcion, es una muestra de la gran ventaja de un macro, ya que podrias realizar con el propio excel un gráfico, pero tendrias que realizar uno para cada uno, en cambio con la macro, puedes realizarlas todas de un solo paso, solo programando y definiendo las variables.
25/02/2013 a las 1:39 am
Cómo sería el código si quisiera que la barra de la peor máquina sea color rojo, y en el caso de la mejor máquina, la barra sea color verde; teniendo en cuenta que mes a mes los rendimientos de las máquinas pueden variar.
Muchas gracias.
16/05/2016 a las 2:52 pm
Saludos, les escribo por que necesito de su ayuda. Estoy realizando un gráfico de barras de tres series. Una es averías totales, otra pendiente y la última las solucionadas. Se coloca una fecha determinada y la gráfica muestra las averías del mes hasta el día seleccionado. Hice un filtro que busca todas las fechas del mes hasta la correspondiente a la fecha requerida. Al momento de hecr la gráfica, me es imposible ajustar el eje x y el rango seleccionado a la fecha indicada. Muy agradecido por la ayuda.
21/12/2019 a las 6:52 pm
saludos, como puedo indicar por medio de vba, la ubicación de un gráfico existente en una hoja.
me explico:
necesito que la esquina superior derecha del gráfico se ubique en la esquina superior derecha de una celda.
esta celda de referencia es dinámica, no es siempre la misma, al ejecutar una macro para crear un reporte debajo de un rango de datos necesito que el gráfico se coloque en la esquina superior derecha de la celda vacia del final del reporte.
luego al agregar mas datos al reporte y generar nuevamente el reporte logicamente la celda referencia ya no será la misma.
gracias por su ayuda