Diagramme mit VBA

Ein Diagramm in Excel einfügen

In Excel können 57 Diagrammtypen verwendet werden. Im folgenden wird gezeigt, wie drei typische Diagrammtypen in ein Tabellenblatt eingefügt werden.

Ein Punkt (XY) Diagramm einfügen

Die Schritte für das Einfügen eines Diagramms in ein Tabellenblatt sind wie folgt

  1. Die Daten für das Diagramm auswählen.
  2. Auf den Reiter „Einfügen“ klicken.
  3. In der Rubrik „Diagramme“ auf die gewünschte Diagrammkategorie klicken. In dem in der Abbildung gezeigten Beispiel wird ein Diagramm der Kategorie „Punkt (XY)- oder Blasendiagramm einfügen“ ausgewählt. Punkt (XY) Diagramme werden zur Darstellung von Daten aus dem wissenschaftlichen oder technischen Bereich verwendet. Es öffnet sich ein Pop-Up Fenster, in dem die Diagrammtypen angezeigt werden.
  4. Auf den den gewünschten Diagrammtyp klicken.

Dann wird das Diagramm in das Tabellenblatt eingefügt.

Klickt man mit der linken Maustaste in den Diagrammbereich öffnet sich der Reiter „Diagrammentwurf“. Dort lässt sich das eingefügte Diagramm an die eigenen Wünsche anpassen. Man kann beispielsweise ein Schnelllayout auswählen oder Diagrammelemente wie Achsentitel oder Diagrammtitel hinzufügen.

Klickt man mit der rechten Maustaste auch einen der Datenpunkte im Diagramm erscheint ein Pop_up Fenster. Dort kann man

  • mit einem Klick auf „Datenreihen-Diagrammtyp ändern …“ den Diagrammtyp ändern
  • mit einem Klick auf „Daten auswählen“ z. B. eine weitere Datenreihe hinzufügen
  • mit einem Klick auf den Pfeil rechts neben „Datenbeschriftung hinzufügen“ Datenbeschriftungen oder Datenlegenden hinzufügen.
  • mit einem Klick auf „Trendlinie hinzufügen…“ eine Trendlinie einfügen
  • mi einem Klick auf „Datenreihen formattieren…“, das Format der Datenreihen ändern. Beispielsweise kann man die Datenpunkte durch eine Linie verbinden oder das Aussehen der Symbole für die Datenpunkte ändern.
Außerdem werden die Datenreihen mit einem Rahmen markiert. Durch Ziehen mit der Maus an den Ziehkästchen rechts unten lässt sich die Zahl der ausgewählten Zellen erweitern oder verkürzen.

Klickt man mit der rechten Maustaste auf einen der Datenpunkte und im Pop-Up Menü auf „Datenreihen formattieren“ läßt sich eine Verbindungslinie zwischen den Datenpunkten einfügen. Auf der rechten Seite des Tabellenblatt wird nun das Fenster „Datenreihen formattieren“ angezeigt. Dort klickt man auf den Farbeimer und anschließend unter „Linie“ auf „Einfarbige Linie

Sind die gewünschten Einstellungen erfolgt, kann man durch Klick auf das Kreuz rechts ob das Fenster „Datenreihen formattieren“ schließen. Das Diagramm sieht dann wie folgt aus:

Es gibt auch die Möglichkeit, eine Trendlinie einzufügen. Hierzu klickt man mit der rechten Maustaste auf einen der Datenpunkte im Diagramm und anschließend im angezeigten Pop-Up Menü auf „Trendlinie hinzufügen …„. Auf der rechten Seite des Tabellenblatts wird dann das Menü „Trendlinie formattieren“ angezeigt. Dort kann man die gewünschten Einstellungen vornehmen. Im Beispiel wurde „Potenz“ ausgewählt sowie „Formel im Diagramm anzeigen“ sowie „Bestimmheitsmaß im Diagramm darstellen. Hat man die gewünschten Einstellungen vorgenommen, kann man das Menü „Trendlinie formatieren“ durch einen Klick auf das „x“ rechts oben wieder schließen.

Ein Säulen Diagramm einfügen:

Die Schritte für das Einfügen eines Diagramms in ein Tabellenblatt sind wie folgt

  1. Die Daten für das Diagramm auswählen.
  2. Auf den Reiter „Einfügen“ klicken.
  3. In der Rubrik „Diagramme“ auf die gewünschte Diagrammkategorie klicken. In dem in der Abbildung gezeigten Beispiel wird ein Diagramm der Kategorie „Säulen- oder Balkendiagramm einfügen“ ausgewählt. Es öffnet sich ein Pop-Up Fenster, in dem die Diagrammtypen angezeigt werden.
  4. Auf den den gewünschten Diagrammtyp klicken.

Dann wird das Diagramm in das Tabellenblatt eingefügt.

Das Ergebnis sieht wie folgt aus:

Ein Kreisdiagramm einfügen:

Die Schritte für das Einfügen eines Diagramms in ein Tabellenblatt sind wie folgt

  1. Die Daten für das Diagramm auswählen.
  2. Auf den Reiter „Einfügen“ klicken.
  3. In der Rubrik „Diagramme“ auf die gewünschte Diagrammkategorie klicken. In dem in der Abbildung gezeigten Beispiel wird ein Diagramm der Kategorie „Kreis- oder Ringdiagramm einfügen“ ausgewählt. Es öffnet sich ein Pop-Up Fenster, in dem die Diagrammtypen angezeigt werden.
  4. Auf den den gewünschten Diagrammtyp klicken.

Dann wird das Diagramm in das Tabellenblatt eingefügt.

 

Das Ergebnis sieht wie folgt aus

Diagrammkategorien und Diagrammtypen

in Microsoft 365 gibt es 16 Diagrammkategorien und 57 Diagrammtypen, die in den beiden folgenden Tabellen aufgeführt sind. Nicht alle Kategorien und Diagrammtypen sind in allen Excel Versionen verfügbar. Die xlChartType Konstanten in Spalte 3 werden für VBA benötigt. Die unterschiedlichen Diagrammtypen können unterschiedliche Anforderungen an die Daten haben.

Diagramme in VBA erstellen oder ändern

In VBA werden die Diagrammtypen durch die Konstanten der Auflistung „XlChartType“ in den beiden Tabellen repräsentiert.

Diagramm in einem Tabellenblatt einfügen

Hierfür gibt es zwei Möglichkeiten

Möglichkeit 1

Ein Diagramm mit der „Shape.AddCharts2“ Methode in ein Tabellenblatt einfügen. Die Syntax ist
ausdruck.AddChart2(Style, XlChartType, Left, Top, Width, Height, NewLayout)
wobei

  • ausdruck – Variable, die ein Shape-Objekt darstellt.
  • Style – Optional,  Diagrammformat. Verwenden Sie „-1“, um die Standardformatvorlage für den in XlChartType angegebenen Diagrammtyp abzurufen.
  • XlChartType – Optional, Diagrammtyp
  • Left – Optional, Position (in Punkt) des linken Rands des Diagramms relativ zum Anker.
  • Top – Optional, Position (in Punkt) des oberen Rands des Diagramms relativ zum Anker.
  • Width – Optional, Breite des Diagramms in Punkt.
  • Height – Optional, Höhe des Diagramms in Punkt.
  • NewLayout – Optional, Wenn NewLayout = True, wird das Diagramm mit den neuen dynamischen Formatierungsregeln eingefügt (Titel ist aktiv, und Legende ist nur aktiv, wenn mehrere Reihen vorliegen).
Ein Punkt (XY) Diagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein Punkt (XY) Diagramm in ein Tabellenblatt mit dem Namen „Punkt“ eingefügt, in dem sich auch die Daten befinden.

Sub Punkt_Diagramm_Einfuegen_1()
Dim ws As Worksheet, sh As Shape, ch As Chart
Set ws = Worksheets("Punkt")
'
' Variante 1
'ws.Shapes.AddChart2(240, xlXYScatter).Select
'ActiveChart.SetSourceData Source:=ws.Range("A1:B11")
'
' Variante 2
'ws.Range("A1:B11").Select
'Set sh = ws.Shapes.AddChart2(240, xlXYScatter)
'
' Variante 3
Set sh = ws.Shapes.AddChart2(240, xlXYScatter)
Set ch = sh.Chart
ch.SetSourceData Source:=ws.Range("A1:B11")
' Gleichwertig: ch.SetSourceData Source:=ws.Range(Cells(1, 1), Cells(11, 2))
'
Set ws = Nothing
Set sh = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Datenpunkte im Punkt (XY) Diagramme mit einer Linie verbinden
Mit dem folgenden Code können Datenpunkte im Punkt (XY) Diagramme mit einer Linie verbunden werden

Sub Punktdiagram_Linie_hinzufuegen()
Dim ws As Worksheet, ch As ChartObject
'
Set ws = Worksheets("Punkt")
Set ch = ws.ChartObjects("Diagramm 1")
'
With ch.Chart.SeriesCollection(1).Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent1
    .Weight = 1
End With
'
Set ws = Nothing
Set ch = Nothing
End Sub

Trendlinie in ein Punkt (XY) Diagramm einfügen
Mit folgendem Code lässt sich eine Trendlinie in ein Punkt (XY) Diagramm einfügen.

Sub Punktdiagramm_Trendlinie_hnzufuegen()
Dim ws As Worksheet, ch As ChartObject
'
Set ws = Worksheets("Punkt")
Set ch = ws.ChartObjects("Diagramm 1")

ch.Chart.SeriesCollection(1).Trendlines.Add
With ch.Chart.SeriesCollection(1).Trendlines(1)
    .Type = xlPower
    .DisplayEquation = True
    .DisplayRSquared = True
End With
'
Set ws = Nothing
Set ch = Nothing
End Sub
Ein gruppiertes Säulendiagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein gruppiertes Säulendiagramm in ein Tabellenblatt mit dem Namen „Saeulen 4“ eingefügt, in dem sich auch die Daten befinden.

 

Sub Diagramm_gruppierte_Saeulen_hinzufuegen()
Dim ws As Worksheet, sh As Shape, ch As Chart
Set ws = Worksheets("Saeulen 4")
'
' Variante 1 (funktioniert)
'ws.Shapes.AddChart2(201, xlColumnClustered).Select
'ActiveChart.SetSourceData Source:=ws.Range("A1:C4")
'
' Variante 2 (funktioniert)
'ws.Range("A1:C4").Select
'Set sh = ws.Shapes.AddChart2(201, xlColumnClustered)
'
' Variante 3 (funktioniert)
Set sh = ws.Shapes.AddChart2(201, xlColumnClustered)
sh.Chart.SetSourceData Source:=ws.Range("A1:C4")
' Gleichwertig: sh.Chart.SetSourceData Source:=ws.Range(cells(1,1),cells(4,3))
'
' Einen Titel einfügen
With sh.Chart
'    Sicher stellen, dass das Diagramm einen Titel hat
     .HasTitle = True
'    Den Titel des Diagramms ändern
     .ChartTitle.Text = "Umsatz und Ausgaben"
End With
'
'
Set ws = Nothing
Set sh = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Ein Kreisdiagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein Kreisdiagramm in ein Tabellenblatt mit dem Namen „Kreisdiagramm“ eingefügt, in dem sich auch die Daten befinden.

 

Sub Kreisdiagramm_hinzufuegen()
Dim ws As Worksheet, sh As Shape, ch As Chart
Set ws = Worksheets("Kreisdiagramm")
'
' Variante 1 (funktioniert)
'ws.Shapes.AddChart2(251, xlPie).Select
'ActiveChart.SetSourceData Source:=ws.Range("A1:B7")
'
' Variante 2 (funktioniert)
'ws.Range("A1:B7").Select
'Set sh = ws.Shapes.AddChart2(251, xlPie)
'
' Variante 3 (funktioniert)
Set sh = ws.Shapes.AddChart2(251, xlPie)
sh.Chart.SetSourceData Source:=ws.Range("A1:B7")
' Gleichwertig: sh.Chart.SetSourceData Source:=ws.Range(cells(1,1),cells(7,2))
'
'
Set ws = Nothing
Set sh = Nothing
End Sub

Das Ergebnis sieht wie folgt aus

Möglichkeit 2

Ein Diagramm mit der „ChartObject.Add“ Methode in ein Tabellenblatt einfügen. Die Syntax ist
ausdruck.Add(Links, Oben, Breite, Höhe)
wobei

  • Ausdruck – Variable, die ein ChartObject darstellt.
  • Links – Erforderlich, Koordinate der linken Seite des Diagramms (in Punkt), relativ zur linken Seite der ausgewählten Zelle in einem Tabellenblatt.
  • Oben – Erforderlich, Koordinate der oberen Seite des Diagramms (in Punkt), relativ zur oberen Seite der ausgewählten Zelle in einem Tabellenblatt.
  • Breite – Erforderlich, Breite des Diagramms in Punkt.
  • Höhe – Erforderlich, Höhe des Diagramms in Punkt.
Ein Punkt (XY) Diagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein Punkt (XY) Diagramm in ein Tabellenblatt mit dem Namen „Punkt“ eingefügt, in dem sich auch die Daten befinden.

Sub Punkt_Diagramm_Einfuegen_2()
Dim ws As Worksheet, ch As ChartObject, rng As Range
Set ws = Worksheets("Punkt")
'
' Datenbereich für das Diagramm
Set rng = ws.Range("A1:B12")

' Diagramm einfügen
Set ch = ws.ChartObjects.Add( _
  Left:=ws.Cells(2, 4).Left, _
  Width:=450, _
  Top:=ws.Cells(2, 4).Top, _
  Height:=250)
'
' Den Diagrammtyp festlegem
ch.Chart.ChartType = xlXYScatter
'
' Den Datenbereich zuweisen
ch.Chart.SetSourceData Source:=rng
'
Set ws = Nothing
Set ch = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Ein gruppiertes Säulendiagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein gruppiertes Säulendiagramm in ein Tabellenblatt mit dem Namen „Saeulen 4“ eingefügt, in dem sich auch die Daten befinden.

 

Sub Diagramm_gruppierte_Saeulen_hinzufuegen_2()
Dim ws As Worksheet, ch As ChartObject, rng As Range
Set ws = Worksheets("Saeulen 4")
'
' Datenbereich für das Diagramm
Set rng = ws.Range("A1:C4")

' Diagramm einfügen
Set ch = ws.ChartObjects.Add( _
  Left:=ws.Cells(2, 4).Left, _
  Width:=450, _
  Top:=ws.Cells(2, 4).Top, _
  Height:=250)
'
' Den Diagrammtyp festlegem
ch.Chart.ChartType = xlColumnClustered
'
' Den Datenbereich zuweisen
ch.Chart.SetSourceData Source:=rng
'
' Einen Titel einfügen
With ch.Chart
'    Sicher stellen, dass das Diagramm einen Titel hat
     .HasTitle = True
'    Den Titel des Diagramms ändern
     .ChartTitle.Text = "Umsatz und Ausgaben"
End With
'
Set ws = Nothing
Set ch = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Ein Kreisdiagramm in ein Tabellenblatt einfügen

Mit dem folgenden Code wird ein Kreisdiagramm in ein Tabellenblatt mit dem Namen „Kreisdiagramm“ eingefügt, in dem sich auch die Daten befinden.

 

Sub Kreisdiagramm_hinzufuegen_2()
Dim ws As Worksheet, ch As ChartObject, rng As Range
Set ws = Worksheets("Kreisdiagramm")
'
' Datenbereich für das Diagramm
Set rng = ws.Range("A1:B7")

' Diagramm einfügen
Set ch = ws.ChartObjects.Add( _
  Left:=ws.Cells(2, 4).Left, _
  Width:=450, _
  Top:=ws.Cells(2, 4).Top, _
  Height:=250)
'
' Den Diagrammtyp festlegem
ch.Chart.ChartType = xlPie
'
' Den Datenbereich zuweisen
ch.Chart.SetSourceData Source:=rng
'
Set ws = Nothing
Set ch = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Diagramm als gesondertes Blatt in eine Excel Arbeitsmappe einfügen

Ein Diagramm mit der „Charts.Add2“ Methode als gesondertes Blatt in eine Excel Arbeitsmappe einfügen. Die Syntax ist
ausdruck. Add2 (Before, After, Count, NewLayout)
wobei

  • Ausdruck – Variable, die ein Charts-Objekt darstellt.
  • Before – Optional, Worksheet Objekt, das das Tabellenblatt angibt, vor dem das neue Diagramm Blatt eingefügt wird.
  • After – Optional, Worksheet Objekt, das das Tabellenblatt angibt, hinter dem das neue Diagramm Blatt hinzugefügt wird.
  • Count – Optional, Anzahl der hinzuzufügenden Zeilen. Der Standardwert lautet eins.
  • NewLayout – Optional, Wenn NewLayout = True, wird das Diagramm mit den neuen dynamischen Formatierungsregeln eingefügt (Titel ist aktiv, und Legende ist nur aktiv, wenn mehrere Reihen vorliegen).

Beispiel:
Mit dem folgenden Code wird ein Punkt (XY) Diagramm als gesondertes Blatt in die Arbeitsmappe eingefügt. Die Daten befinden sich im Tabellenblatt mit dem Namen „Punkt“.

Sub Punkt_Diagramm_Einfuegen_4()
Dim MeinDiagramm As Chart, ws As Worksheet
'
Set ws = Worksheets("Punkt")
'
' Neues Blatt als Diagrammblatt hinzufuegen
Set MeinDiagramm = Charts.Add2(After:=ws)
'
With MeinDiagramm
     ' Hier kommt es auf die Reihenfolge an
     ' Diagrammtyp setzen
     .ChartType = xlXYScatter
     ' Quelldaten zuweisen
     .SetSourceData ws.Range("A1:B12")
End With
'
Set ws = Nothing
Set MeinDiagramm = Nothing
End Sub

Das Ergebnis sieht wie folgt aus:

Das mit dem VBA Code erstellte Diagramm wird als Blatt „Diagramm1“ in die Arbeitsmappe eingefügt. Die Daten befinden sich im Tabellenblatt „Punkt“

Diagramm anpassen

Mit folgendem Beispiel Code lässt sich ein Diagramm an die eigenen Wünsche anpassen.Es gibt viele Möglichkeiten, ein Diagramm anzupassen. Daher ist es nicht immer einfach, die benötigten Anweisungen zu finden.

Beispiel:
Mit dem folgenden Code lässt sich das Diagramm „Diagramm 6“ anpassen. Es soll eine Anregung dafür bieten, was man alles ändern kann.

Sub Punkt_Diagramm_Anpassen()
Dim ws As Worksheet, ch As ChartObject
Set ws = Worksheets("Punkt")
'
Set ch = ws.ChartObjects("Diagramm 6")

With ch.Chart
'    Sicher stellen, dass das Diagramm einen Titel hat
     .HasTitle = True
'    Den Titel des Diagramms ändern
     .ChartTitle.Text = "Kurve"
End With
'
ch.Chart.SetSourceData Source:=ws.Range("A1:B12")
' Gleichwertig: ch.Chart.SetSourceData Source:=ws.Range(Cells(1, 1), Cells(12, 2))
'
' Achsentitel einfuegen
' Achsentitel für die horizontale Achse einfügen
With ch.Chart.Axes(xlCategory)
    .HasTitle = True
    .AxisTitle.Text = "x-Achse"
    .HasMajorGridlines = True
    .HasMinorGridlines = True
End With
' Achsentitel für die vertikale Achse einfügen
With ch.Chart.Axes(xlValue)
    .HasTitle = True
    .AxisTitle.Text = "y-Achse"
    .HasMajorGridlines = True
    .HasMinorGridlines = True
End With
'
' Verbindungslinie formattieren
With ch.Chart.FullSeriesCollection(1).Format.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(0, 0, 255)
    .Weight = 0.75
End With
'
' Ränder des Diagramms ändern
With ch.Chart
    .ChartArea.Border.LineStyle = xlContinuous ' xlDash
    .ChartArea.Border.Weight = xlThin ' xlThick
    .ChartArea.Border.Color = RGB(0, 0, 0)
    .ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
    .PlotArea.Border.LineStyle = xlContinuous ' xlDot
    .PlotArea.Border.Weight = xlThin ' xlThick
    .PlotArea.Border.Color = RGB(0, 0, 0)
    '.PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
    '.PlotArea.Format.Fill.ForeColor = xlNone
End With

Set ws = Nothing
Set ch = Nothing
End Sub

Den Namen des Diagramms findet man, in dem man mit der linken Maustaste in den Diagrammbereich klíckt. Dann wird der Diagrammname im blau markierten Bereich angezeigt.

Schreibe einen Kommentar