Buscar..


Creando un gráfico con rangos y un nombre fijo

Los gráficos se pueden crear trabajando directamente con el objeto Series que define los datos del gráfico. Para llegar a la Series sin un gráfico existente, crea un objeto ChartObject en una ChartObject de Worksheet determinada y luego obtiene el objeto Chart de la misma. La ventaja de trabajar con el objeto Series es que puede establecer los Values y Values XValues consultando los objetos de Range . Estas propiedades de datos definirán correctamente la Series con referencias a esos rangos. La desventaja de este enfoque es que la misma conversión no se maneja al configurar el Name ; Es un valor fijo. No se ajustará con los datos subyacentes en el Range original. Verificando la fórmula SERIES y es obvio que el nombre es fijo. Esto debe ser manejado creando la fórmula SERIES directamente.

Código utilizado para crear el gráfico

Tenga en cuenta que este código contiene declaraciones de variables adicionales para el Chart y la Worksheet . Estos pueden omitirse si no se utilizan. Sin embargo, pueden ser útiles si está modificando el estilo o cualquier otra propiedad del gráfico.

Sub CreateChartWithRangesAndFixedName()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get reference to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    ser.Values = yData
    ser.XValues = xData
    ser.Name = serName
    
    ser.ChartType = xlXYScatterLines

End Sub

Datos / rangos originales y Chart resultante después de que se ejecuta el código

Tenga en cuenta que la fórmula SERIES incluye una "B" para el nombre de la serie en lugar de una referencia al Range que la creó.

datos y gráfico resultante

Creando un gráfico vacío

El punto de partida para la gran mayoría de códigos de gráficos es crear un Chart vacío. Tenga en cuenta que esta Chart está sujeta a la plantilla de gráfica predeterminada que está activa y puede que no esté realmente vacía (si la plantilla se ha modificado).

La clave para el ChartObject es determinar su ubicación. La sintaxis de la llamada es ChartObjects.Add(Left, Top, Width, Height) . Una vez que se crea el objeto ChartObject , puede utilizar su objeto Chart para modificar realmente el gráfico. El objeto ChartObject comporta más como una Shape para colocar el gráfico en la hoja.

Código para crear un gráfico vacío

Sub CreateEmptyChart()
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (0, 0) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'additional code to modify the empty chart
    '...

End Sub

Gráfico resultante

Ejemplo de gráfico vacío

Crea un gráfico modificando la fórmula SERIES

Para tener un control completo sobre un nuevo objeto Chart y Series (especialmente para un nombre de Series dinámico), debe recurrir a la modificación de la fórmula SERIES directamente. El proceso para configurar los objetos de Range es sencillo y el principal obstáculo es simplemente la creación de cadenas para la fórmula SERIES .

La fórmula SERIES toma la siguiente sintaxis:

=SERIES(Name,XValues,Values,Order)

Estos contenidos pueden suministrarse como referencias o como valores de matriz para los elementos de datos. Order representa la posición de la serie dentro del gráfico. Tenga en cuenta que las referencias a los datos no funcionarán a menos que estén completamente calificadas con el nombre de la hoja. Para ver un ejemplo de una fórmula de trabajo, haga clic en cualquier serie existente y verifique la barra de fórmulas.

Código para crear un gráfico y configurar datos usando la fórmula SERIES

Tenga en cuenta que la creación de cadenas para crear la fórmula SERIES utiliza .Address(,,,True) . Esto garantiza que se utilice la referencia de rango externa para que se incluya una dirección completamente calificada con el nombre de la hoja. Recibirá un error si se excluye el nombre de la hoja .

Sub CreateChartUsingSeriesFormula()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    'set the SERIES formula
    '=SERIES(name, xData, yData, plotOrder)
    
    Dim formulaValue As String
    formulaValue = "=SERIES(" & _
        serName.Address(, , , True) & "," & _
        xData.Address(, , , True) & "," & _
        yData.Address(, , , True) & ",1)"
    
    ser.Formula = formulaValue
    ser.ChartType = xlXYScatterLines

End Sub

Datos originales y cuadro resultante.

Tenga en cuenta que para este gráfico, el nombre de la serie se establece correctamente con un rango a la celda deseada. Esto significa que las actualizaciones se propagarán al Chart .

Datos y tabla de la fórmula SERIES.

Organizar gráficos en una cuadrícula

Una tarea común con gráficos en Excel es estandarizar el tamaño y el diseño de múltiples gráficos en una sola hoja. Si lo hace manualmente, puede mantener presionada la tecla ALT mientras cambia el tamaño o mueve la tabla para "pegarse" a los límites de las celdas. Esto funciona para un par de gráficos, pero un enfoque de VBA es mucho más simple.

Código para crear una grilla

Este código creará una cuadrícula de gráficos que comienza en una posición dada (Arriba, Izquierda), con un número definido de columnas y un tamaño de gráfico común definido. Los gráficos se colocarán en el orden en que se crearon y se ajustarán alrededor del borde para formar una nueva fila.

Sub CreateGridOfCharts()

    Dim int_cols As Integer
    int_cols = 3
    
    Dim cht_width As Double
    cht_width = 250
        
    Dim cht_height As Double
    cht_height = 200
    
    Dim offset_vertical As Double
    offset_vertical = 195
    
    Dim offset_horz As Double
    offset_horz = 40

    Dim sht As Worksheet
    Set sht = ActiveSheet

    Dim count As Integer
    count = 0
    
    'iterate through ChartObjects on current sheet
    Dim cht_obj As ChartObject
    For Each cht_obj In sht.ChartObjects
        
        'use integer division and Mod to get position in grid
        cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
        cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
        cht_obj.Width = cht_width
        cht_obj.Height = cht_height

        count = count + 1

    Next cht_obj
End Sub

Resultado con varios gráficos

Estas imágenes muestran el diseño aleatorio original de los gráficos y la cuadrícula resultante de ejecutar el código anterior.

antes de

Antes de la imagen de varios gráficos.

Después

cuadrícula de gráficos



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow