Ricerca…


Creazione di un grafico con intervalli e un nome fisso

I grafici possono essere creati lavorando direttamente con l'oggetto Series che definisce i dati del grafico. Per arrivare alla Series senza un grafico esistente, si crea un oggetto ChartObject su un determinato Worksheet e si ottiene l'oggetto Chart da esso. Il vantaggio di lavorare con l'oggetto Series è che puoi impostare Values e XValues facendo riferimento agli oggetti Range . Queste proprietà dei dati definiranno correttamente la Series con riferimenti a tali intervalli. Lo svantaggio di questo approccio è che la stessa conversione non viene gestita durante l'impostazione del Name ; è un valore fisso. Non si regola con i dati sottostanti l'originale Range . Controllo della formula SERIES ed è ovvio che il nome è fisso. Questo deve essere gestito creando direttamente la formula SERIES .

Codice utilizzato per creare un grafico

Si noti che questo codice contiene dichiarazioni di variabili aggiuntive per il Chart e il Worksheet . Questi possono essere omessi se non vengono utilizzati. Possono essere utili tuttavia se si modifica lo stile o altre proprietà del grafico.

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

Dati / intervalli originali e Chart risultante dopo l'esecuzione del codice

Si noti che la SERIES formula include una "B" per il nome della serie, invece di un riferimento alla Range che lo ha creato.

dati e grafico risultante

Creare un grafico vuoto

Il punto di partenza per la maggior parte del codice dei grafici è creare un Chart vuoto. Si noti che questo Chart è soggetto al modello di grafico predefinito che è attivo e potrebbe non essere effettivamente vuoto (se il modello è stato modificato).

La chiave di ChartObject sta determinando la sua posizione. La sintassi per la chiamata è ChartObjects.Add(Left, Top, Width, Height) . Una volta creato ChartObject , è possibile utilizzare il relativo oggetto Chart per modificare effettivamente il grafico. ChartObject si comporta più come una Shape per posizionare il grafico sul foglio.

Codice per creare un grafico vuoto

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

Grafico risultante

esempio di grafico vuoto

Creare un grafico modificando la formula SERIE

Per il controllo completo su un nuovo oggetto Chart e Series (in particolare per un nome Series dinamico), è necessario ricorrere alla modifica della formula SERIES direttamente. Il processo per impostare gli oggetti Range è semplice e l'ostacolo principale è semplicemente la costruzione di stringhe per la formula SERIES .

La formula SERIES prende la seguente sintassi:

=SERIES(Name,XValues,Values,Order)

Questi contenuti possono essere forniti come riferimenti o come valori di matrice per gli elementi di dati. Order rappresenta la posizione della serie all'interno del grafico. Si noti che i riferimenti ai dati non funzioneranno a meno che non siano pienamente qualificati con il nome del foglio. Per un esempio di una formula di lavoro, fai clic su qualsiasi serie esistente e controlla la barra della formula.

Codice per creare un grafico e impostare i dati utilizzando la formula SERIES

Si noti che la creazione di stringhe per creare la formula SERIES utilizza .Address(,,,True) . Ciò garantisce che venga utilizzato il riferimento Range esterno in modo da includere un indirizzo completo con il nome del foglio. Si verificherà un errore se il nome del foglio è escluso .

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

Dati originali e grafico risultante

Si noti che per questo grafico, il nome della serie è impostato correttamente con un intervallo per la cella desiderata. Ciò significa che gli aggiornamenti si propagheranno al Chart .

dati e grafici dalla formula SERIE

Organizzazione di grafici in una griglia

Una routine comune con i grafici in Excel è la standardizzazione delle dimensioni e del layout di più grafici su un singolo foglio. Se fatto manualmente, puoi tenere premuto ALT mentre ridimensiona o spostando il grafico per "attaccare" ai contorni delle celle. Questo funziona per un paio di grafici, ma un approccio VBA è molto più semplice.

Codice per creare una griglia

Questo codice creerà una griglia di grafici a partire da una determinata posizione (in alto a sinistra), con un numero definito di colonne e una dimensione di grafico comune definita. I grafici verranno posizionati nell'ordine in cui sono stati creati e avvolti attorno al bordo per formare una nuova riga.

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

Risultato con diversi grafici

Queste immagini mostrano il layout casuale originale dei grafici e la griglia risultante dall'esecuzione del codice sopra.

Prima

prima dell'immagine di diversi grafici

Dopo

griglia di grafici



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow