Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
20111018_graficos_segundaparte_resultado

Creación de gráficos con macros (parte 2)

| 3 Comments

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:

Creación de gráficos con macros (parte 2), graficos con vba

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.

Creación de gráficos con macros (parte 2), graficos con vba

Como resultado de la ejecución obtendremos lo siguiente:

Creación de gráficos con macros (parte 2), graficos con vba

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.

3 Comments

  1. 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

  2. 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.

  3. 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.

Deja un comentario

Required fields are marked *.


Excel Avanzado located at , Lima, Perú . Reviewed by usuarios rated: 4.7 / 5