Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Säulendiagramm mittels VBA erstellen

Forumthread: Säulendiagramm mittels VBA erstellen

Säulendiagramm mittels VBA erstellen
08.07.2013 10:10:09
Grigor
Hallo zusammen,
ich versuche anhand VBA ein Säulendiagramm aus berechneten Werten zu erstellen. Die Anzahl der Spalten mit Werten kann variieren.
Also nach Klicken auf dem Button "OK" werden die in die Userform eingegebenen Werte berechnet und nach der Tabelle exportiert. Ein Klick auf "Diagramm erstellen" soll dann aus dem Bereich (B30:B40; C30:C40; D30:D40... usw.) das Säulendiagramm erzeugen.
https://www.herber.de/bbs/user/86244.xlsm
Ich bin für jede Hilfe dankbar.
Viele Grüße
Grigor

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 10:32:20
Klaus
Hi Grigor,
ich sehe eine Mustertabelle, in der wahllos Zahlen verteilt sind. Eine Userform existiert zwar, aber es gibt keinen Button, kein Event welches sie aufruft.
Ich muss jetzt raten, welche Zahlen wie und wohin was für ein Säulendiagramm ergeben sollen. Oder du erklärst es nochmal vernünftig!
Im Prinzip erstellst du ein Säulendiagramm so (Makrorekorder-Code)
Sub Macro1()
Range("B30:D40").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range("Tabelle1!$B$30:$D$40")
End Sub
etwas eleganter ginge es so:dann so:
Option Explicit
'* Module for quick creation of charts in the active worksheet
'* created: June 2013 by Klaus Meyer von der Twer (Thanks to Rudi @ herber!)
'* every feature after data-Range is optional!
Sub test()
Call MakeSingleChart(Range("B4:C12"), 1, Range("A1"), 300, 200, 10, 90, True)
Call MakeSingleChart(Range("B4:C12"), , , , , , , False)
Call MakeSingleChart(Range("B4:C12"))
End Sub
Sub MakeSingleChart( _
rngData As Range, _
Optional TypeChart As Integer, _
Optional rngTopLeftCell As Variant, _
Optional iHeight As Variant, _
Optional iWidth As Variant, _
Optional iScaleMin As Variant, _
Optional iScaleMax As Variant, _
Optional bNoLegend As Boolean)
'rngData = Range of Data
'TypeChart 1=Line, 2=Pie, 3=Column, 4=ColumnStacked, 5=ColumStacked100, none=Line
'rngTopLeftCell = Move Chart's top left corner to THIS cell, places in mid-screen if not  _
choosen
'iHeight and iWidth = Height/Width in Pixels, uses standard if not choosen
'iScaleMin and iScaleMax = FIX X-Axis to this value. If not choosen, chart will autoscale
'bNoLegend = if TRUE, Legend is removed. If FALSE or not choosen, Legend stays in the chart
On Error GoTo hell
'rngTopLeftCell hast to be a valid RANGE, iHeight a valid INTEGER and so on
'  Declaration has to be VARIANT to enable the ISMISSING feature. In case of wrong usage
'  (example: set height to "hello world") it will end with ONERROR
Dim myCht As Object
Set myCht = ActiveSheet.Shapes.AddChart       'create new Chart
With myCht
With .Chart
'Chart definitions ************************************
.ChartType = xlLine    'set Line as standard
Select Case TypeChart
Case 1
Case 2
.ChartType = xlPie
Case 3
.ChartType = xlColumnClustered
Case 4
.ChartType = xlColumnStacked
Case 5
.ChartType = xlColumnStacked100
Case Else
End Select
.SetSourceData Source:=rngData
' ************************************ Chart Definitions
If bNoLegend Then .Legend.Delete           'Legend or not?
End With
'move and scale ************************************
If Not IsMissing(iScaleMax) Then .Chart.Axes(xlValue).MaximumScale = iScaleMax
If Not IsMissing(iScaleMin) Then .Chart.Axes(xlValue).MinimumScale = iScaleMin
If Not IsMissing(rngTopLeftCell) Then
.Top = rngTopLeftCell.Top
.Left = rngTopLeftCell.Left
End If
If Not IsMissing(iHeight) Then .Height = iHeight
If Not IsMissing(iWidth) Then .Width = iWidth
'************************************ move and scale
End With
GoTo heaven:
hell:
'get rid of wrong chart
myCht.Delete
'display error messge
MsgBox "could not create chart!" & vbCrLf _
& "Error Number: " & Err.Number & _
vbCrLf & "Error: " & Err.Description
heaven:
End Sub
Den Bereich des Diagramms kannst du im Call angeben. Wie der Zustande kommt (aus deiner Userform) weisst nur du.
Grüße,
Klaus M.vdT.

Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:08:41
Grigor
Hallo Klaus,
ich habe mal jetzt das Diagramm ,das ich brauche, manuell erstellt. Wäre gut, wenn man es in VBA programieren kann..
Ich hoffe damit ist klarer geworden, was ich genau in Sicht habe.. Wenn nicht versuche ich es nochmal zu erklären.
https://www.herber.de/bbs/user/86249.xlsm
Gruß
Grigor

Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:28:38
Klaus
Hi,
nein, es ist leider nicht klarer geworden.
Du zeigst ein Diagramm über den Bereich B1:C6, ich sehe keinerlei Verbindungen mehr zu irgendeiner Userform.
Erstell das Diagramm doch einfach per Hand und lass dabei den Makrorekorder laufen.
Grigor, ich kann jetzt natürlich VERMUTEN dass du variable Diagramme möchtest, über verschiedene Bereiche (und nich immer nur B1:C6) ... aber Aufgrund einer VERMUTUNG werde ich hier keine Lösung präsentieren. Es bleibt deine Aufgabe, eine FRAGE zu stellen die dann beantwortet werden kann.
Grüße,
Klaus M.vdT.

Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:43:12
Grigor
ich habe es noch am anfang gestagt, aber egal ich sage es nochmal. Das diagramm so wie es jetzt aussieht muss nach Knopfdruck ("Diagramm erstellen" - siehe Userform) erzeugt werden. Es müssen keine variable Diagramme erstellt werden, sondern nur ein einziges Diagramm (siehe Tabellenblatt) mit gestapelten Säulen.
Sorry für die Unklarheiten bis jetzt..
Danke schon mal.
Viele Grüße
Grigor

Anzeige
Rekorder?
08.07.2013 12:47:12
Klaus
Hallo Grigor,
dann rekordere doch die gesamte Diagrammerstellung und lege sie auf den Knopf, wo ist das Problem?
Grüße,
Klaus M.vdT.

AW: Rekorder?
08.07.2013 13:00:13
Grigor
Hallo Klaus,
kein Problem, es funktioniert. Danke
Viele Grüße
Grigor
;
Anzeige
Anzeige

Infobox / Tutorial

Säulendiagramm mittels VBA erstellen


Schritt-für-Schritt-Anleitung

Um ein Säulendiagramm in Excel mittels VBA zu erstellen, folge diesen einfachen Schritten:

  1. Öffne den VBA-Editor in Excel, indem du ALT + F11 drückst.

  2. Füge ein neues Modul ein: Rechtsklick auf "VBAProject" → Einfügen → Modul.

  3. Kopiere und füge den folgenden Code in das Modul ein:

    Sub ErstelleSaeulendiagramm()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("Tabelle1") ' Den Namen deiner Tabelle anpassen
        Dim myChart As ChartObject
    
        ' Diagramm erstellen
        Set myChart = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
        With myChart.Chart
            .SetSourceData Source:=ws.Range("B30:D40") ' Datenbereich anpassen
            .ChartType = xlColumnClustered ' Typ des Diagramms
        End With
    End Sub
  4. Passe den Datenbereich (z.B. B30:D40) und den Tabellennamen (Tabelle1) nach deinen Bedürfnissen an.

  5. Führe das Makro aus, um das Säulendiagramm zu erstellen.


Häufige Fehler und Lösungen

  • Fehler: "Diagramm konnte nicht erstellt werden."

    • Lösung: Überprüfe, ob der angegebene Datenbereich existiert und korrekt ist.
  • Fehler: Diagramm wird nicht an der erwarteten Stelle angezeigt.

    • Lösung: Stelle sicher, dass die Koordinaten für Left, Top, Width und Height im Code korrekt sind.

Alternative Methoden

Wenn du kein VBA verwenden möchtest, kannst du ein Säulendiagramm auch manuell in Excel erstellen:

  1. Markiere den gewünschten Datenbereich.
  2. Gehe zu "Einfügen" → "Diagramm" und wähle den Typ "Säule".
  3. Passe das Diagramm im Diagramm-Tools-Menü an.

Praktische Beispiele

Beispiel 1: Erstellen eines gestapelten Säulendiagramms:

Sub ErstelleGestapeltesSaeulendiagramm()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1")
    Dim myChart As ChartObject

    Set myChart = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
    With myChart.Chart
        .SetSourceData Source:=ws.Range("B30:D40")
        .ChartType = xlColumnStacked ' Gestapeltes Säulendiagramm
    End With
End Sub

Beispiel 2: Verwendung von verschiedenen Diagrammtypen:

Sub ErstelleVerschiedenesDiagramm()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1")
    Dim myChart As ChartObject

    Set myChart = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
    With myChart.Chart
        .SetSourceData Source:=ws.Range("B30:D40")
        .ChartType = xlColumnClustered ' Clustered
        ' .ChartType = xlLine ' Für Liniendiagramm
        ' .ChartType = xlPie ' Für Kuchendiagramm
    End With
End Sub

Tipps für Profis

  • Nutze With ... End With-Blöcke, um den Code leserlicher zu gestalten.
  • Verwende Variablen für häufig genutzte Objekte (z.B. Dim myCht As ChartObject), um die Ausführung zu beschleunigen.
  • Experimentiere mit den Diagrammformatierungen, um ansprechende Säulendiagramme zu erstellen.

FAQ: Häufige Fragen

1. Kann ich das Diagramm dynamisch anpassen?
Ja, du kannst den Datenbereich dynamisch anpassen, indem du die Werte in der Userform berechnest und übergibst.

2. Funktioniert das auch in älteren Excel-Versionen?
Der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren. Stelle sicher, dass du die richtige Excel-Version verwendest, die VBA unterstützt.

3. Wie kann ich das Diagramm nach der Erstellung formatieren?
Du kannst zusätzliche Formatierungen in deinem VBA-Code hinzufügen, wie z.B. Achsentitel, Legenden und Farben, um das Säulendiagramm anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige