excel-vba
Diagramme und Diagramme
Suche…
Erstellen eines Diagramms mit Bereichen und einem festen Namen
Diagramme können erstellt werden, indem direkt mit dem Series
Objekt gearbeitet wird, das die Diagrammdaten definiert. Um ohne ein vorhandenes Diagramm zur Series
zu gelangen, erstellen Sie ein ChartObject
in einem bestimmten Worksheet
und ChartObject
dann das Chart
Objekt ab. Die Arbeit mit dem Series
Objekt hat den XValues
dass Sie die Values
und XValues
Values
XValues
indem Sie auf Range
Objekte verweisen. Diese Dateneigenschaften definieren die Series
ordnungsgemäß mit Verweisen auf diese Bereiche. Der Nachteil dieses Ansatzes ist, dass beim Festlegen des Name
nicht dieselbe Konvertierung ausgeführt wird. es ist ein fester Wert. Es wird nicht mit den zugrunde liegenden Daten im ursprünglichen Bereich Range
. Wenn Sie die SERIES
Formel SERIES
, ist es offensichtlich, dass der Name festgelegt ist. Dies muss durch direktes Erstellen der SERIES
Formel erfolgen.
Code zum Erstellen eines Diagramms
Beachten Sie, dass dieser Code zusätzliche Variablendeklarationen für das Chart
und das Worksheet
. Diese können weggelassen werden, wenn sie nicht verwendet werden. Sie können jedoch nützlich sein, wenn Sie den Stil oder andere Diagrammeigenschaften ändern.
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
Ursprüngliche Daten / Bereiche und resultierendes Chart
nach Code-Ausführung
Beachten Sie, dass die SERIES
Formel anstelle des Verweises auf den Range
, in dem sie erstellt wurde, ein "B"
für den SERIES
enthält.
Erstellen eines leeren Diagramms
Der Ausgangspunkt für die überwiegende Mehrheit des Diagrammcodes ist das Erstellen eines leeren Chart
. Beachten Sie, dass dieses Chart
der aktiven Standardvorlagenvorlage unterliegt und möglicherweise nicht leer ist (wenn die Vorlage geändert wurde).
Der Schlüssel für das ChartObject
ist das Bestimmen seines Standorts. Die Syntax für den Aufruf lautet ChartObjects.Add(Left, Top, Width, Height)
. Nachdem das ChartObject
erstellt wurde, können Sie das Chart
Objekt verwenden, um das Diagramm tatsächlich zu ändern. Das ChartObject
verhält sich eher wie eine Shape
um das Diagramm auf dem ChartObject
zu positionieren.
Code zum Erstellen eines leeren Diagramms
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
Ergebnisdiagramm
Erstellen Sie ein Diagramm, indem Sie die SERIES-Formel ändern
Für die vollständige Kontrolle über ein neues Chart
und Series
- Objekt (vor allem für einen dynamischen Series
müssen Sie die zu modifizierenden greifen SERIES
Formel direkt. Der Vorgang zum Einrichten der Range
Objekte ist unkompliziert und die Haupthürde besteht einfach aus der Zeichenfolge für die SERIES
Formel.
Die SERIES
Formel verwendet die folgende Syntax:
=SERIES(Name,XValues,Values,Order)
Diese Inhalte können als Referenzen oder als Array-Werte für die Datenelemente bereitgestellt werden. Order
für die Reihenposition innerhalb des Diagramms. Beachten Sie, dass die Verweise auf die Daten nur funktionieren, wenn sie mit dem Blattnamen vollständig qualifiziert sind. Klicken Sie für ein Beispiel einer Arbeitsformel auf eine vorhandene Serie, und überprüfen Sie die Formelleiste.
Code zum Erstellen eines Diagramms und Einrichten von Daten mithilfe der SERIES
Formel
Beachten Sie, dass beim Erstellen der Zeichenfolge zur Erstellung der SERIES
Formel .Address(,,,True)
. Dadurch wird sichergestellt, dass die externe Bereichsreferenz verwendet wird, sodass eine vollständig qualifizierte Adresse mit dem Blattnamen angegeben wird. Sie erhalten eine Fehlermeldung, wenn der Blattname ausgeschlossen ist .
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
Originaldaten und Ergebnisdiagramm
Beachten Sie, dass für dieses Diagramm der Serienname richtig mit einem Bereich zur gewünschten Zelle festgelegt ist. Dies bedeutet, dass Aktualisierungen auf das Chart
.
Charts in einem Raster anordnen
Eine übliche Aufgabe bei Diagrammen in Excel ist die Standardisierung der Größe und des Layouts mehrerer Diagramme auf einem einzelnen Blatt. Wenn Sie dies manuell tun, können Sie die ALT- Taste gedrückt halten, während Sie die Größe des Diagramms ändern oder verschieben, um an den Zellgrenzen zu bleiben. Dies funktioniert für ein paar Diagramme, aber ein VBA-Ansatz ist viel einfacher.
Code zum Erstellen eines Gitters
Mit diesem Code wird ein Diagrammraster erstellt, das an einer bestimmten Position (oben, links) mit einer definierten Anzahl von Spalten und einer definierten allgemeinen Diagrammgröße beginnt. Die Diagramme werden in der Reihenfolge platziert, in der sie erstellt wurden, und werden um den Rand herumgelegt, um eine neue Zeile zu bilden.
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
Ergebnis mit mehreren Diagrammen
Diese Bilder zeigen das ursprüngliche zufällige Layout der Diagramme und das resultierende Raster, wenn der obige Code ausgeführt wird.
Vor
Nach dem