Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1940to1944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Excel VBA mehrere Diagramme nach einander erstellen Schleife
19.08.2023 01:24:43
Gregory
Hallo zusammen, nach dem ich schon einige male von Beiträgen und Lösungen in diesem Forum partizipiert habe, habe ich mich entschlossen hier zu registrieren um Euch Excel und VBA Profis an meinen Herausforderungen teilhaben zu lassen, in der Hoffnung dass diese Herausforderung für Euch nicht besonders groß ist. Ich habe eine Tabelle mit mehreren Tbellenblättern.

Blatt 1 = Daten werden gesammelt, immer aktuellere Werte werden unten drunter eingefügt, die Beispiel Datei. ( die Datenreihen werden mittels Bereichsnamen gesteuert )

Blatt 2 = hier werden für die Daten ausgewertet und nach gewissen Kriterien eine Sortierung für die Daten berechnet. Meine Herausforderung liegt darin dass ich zu einer bestimmten Zeit diese einzelne Werte graphisch dargestellt haben muss um es genauer analysieren zu können.

Für die Sortierung sind die Bereichsnamen auschlaggebend ( werden mittels Bereich verschieben Formel berechnet ) Viel glücklicher wäre ich wenn ich folgendes könnte: - wenn ich mit Hilfe von VBA 50 Diagramme erstellen könnte, nach einander mit den Werten von Bereichsnamen ( variabel, weil ich nicht weiss wieviel Werte vorhanden sind ) - diese Diagramme müsste natürlich auch noch die gleiche Skalierung haben ( +- 2% ) dadurch ergeben sich unterschiedliche min - max Werte - und als letztes müssten diese Diagramme auf ein Extra Blatt kopiert werden, so eine Art Dashboard Nach dem ich hier soviel geschrieben habe, stelle ich mir selber die Frage ob es überhaupt so möglich ist. Ich hoffe natürlich dass es ohne zu großen Aufwand geht und dass Ihr mirhelfen könnt. Vielen Dank für Eure Mühe vorab !

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Rückfragen
19.08.2023 10:00:06
Beverly
Hi Gregory,

1. du verwendest bei den definierten Namen nicht BEREICH.VERSCHIEBEN sondern INDEX
2. die Mappe sollte schon ein Beispieldiagramm enthalten, denn woher soll man wissen wie die Diagramme aussehen sollen?
3. weshalb sollen die Diagramm überhaupt jedesmal neu erstellt werden, wenn sich ihr Wertebereich durch definierte Namen doch automatisch anpassen würde?

Bis später
Karin

https://excel-inn.de/

Rückfragen
19.08.2023 16:16:44
Gregory
Hallo Beverly,

Sorry dass ich mich jetzt erst melde, war nur die ganze Zeit beschäftigt, auch unter anderem um die Datei kleiner zu bekommen:-)

berechtigte Frage, danke !

Habe die Datei jetzt minimal angepasst, siehe den Link.

Das Problem mit den Diagrammen bei den es mit Bereichsnamen gearbeitet wird, weil es ständig aktualisiert und sortiert wird, verzögert das Ganze die Bearbeitung der Datei.

https://www.herber.de/bbs/user/162383.xlsm

Die Daten werden Online eingespielt, jede Minute, 5,10 min, ist einstellbar und betrachtet soll nur 2 -5 mal pro Tag aber den gesamten Zeitraum und pro Lagerfach, Regal.

Bei der beigefügten Tabelle im Arbeitsblatt "AAA", soll das Dashboard entstehen und als Beispiel habe ich die 2x Diagramme dort eingefügt.

Ich hoffe dass es so verständlich für Dich war.
Anzeige
Lösungsvorschlag
19.08.2023 18:26:11
Beverly
Hi Gregory,

wenn ich deine Mappe richtig interpretiere geht es eigentlich nur darum, den Wertebereich der Datenreihen "Datenreihen1" und "Fläche" immer wieder neu anzupassen, da sich nur bei diesen die Anzahl an Daten ändern kann - die anderen Datenreihen behalten jeweils ihren Bezug auf ein und dieselben Zellen. Alle Daten stehen in Tabelle "ROHES".
Außerdem müssen jeweils Min und Max, Hauptintervall und Achsenschnittpunkt angepasst werden - alle Daten dazu stehen in Tabelle "ROH1"

Die 50 Diagramm existieren in deiner Originalmappe bereits? Vom Prinzip her kannst du diese 50 Diagramme mit folgendem Code jeweils an die Anzahl an vorhandenen Daten anpassen:

Sub DiasAnpassen()

Dim chrDia As ChartObject
Dim serReihe As Series
Dim lngLetzte As Long
Dim intSpalte As Integer
Dim rngRegal As Range ' Variable für Regal-Nr in "ROHES", Suche in Zeile 1
Dim rngRegal2 As Range ' Variable für Regal-Nr in "ROH1", Suche in Spalte A ???
Dim wks As Worksheet
Dim dblMin As Double ' Minimum aus Spalte T
Dim dblMax As Double ' Maximum aus Spalte U
Dim dblInt As Double ' Intervall aus Spalte V
Dim dblCross As Double ' Schnittpunkt aus Spalte X
Set wks = Worksheets("ROHES")
lngLetzte = wks.Cells(Rows.Count, 1).End(xlUp).Row
For Each chrDia In ActiveSheet.ChartObjects
Set rngRegal = wks.Rows(1).Find(chrDia.TopLeftCell.Value, lookat:=xlWhole)
Set rngRegal2 = Worksheets("ROH1").Columns(1).Find(chrDia.TopLeftCell.Value, lookat:=xlWhole)
intSpalte = rngRegal.Column
dblMin = Worksheets("ROH1").Cells(rngRegal2.Row, "T")
dblMax = Worksheets("ROH1").Cells(rngRegal2.Row, "U")
dblInt = Worksheets("ROH1").Cells(rngRegal2.Row, "V")
dblCross = Worksheets("ROH1").Cells(rngRegal2.Row, "X")
With chrDia.Chart
For Each serReihe In .SeriesCollection
If serReihe.Name = "Datenreihen1" Or serReihe.Name = "FLÄCHE" Then
serReihe.Values = "=ROHES!" & Range(Cells(30, intSpalte), Cells(lngLetzte, intSpalte)).Address
End If
Next serReihe
.Axes(xlValue).MinimumScale = dblMin
.Axes(xlValue).MaximumScale = dblMax
.Axes(xlValue).MajorUnit = dblInt
.Axes(xlValue).CrossesAt = dblCross
End With
Next chrDia
End Sub


Der Code sucht jeweils in Tabelle "ROHES" in Zeile 1 den Inhalt der Zelle, auf der die linke obere Ecke des Diagramms liegt - also die Regalbezeichnung Regal_1, Regal_2 usw. und ermittelt dadurch die Spalte mit den Daten, wobei die letzte belegte Zeile in Spalte A berücksichtigt wird, um den Wertebereich festzulegen.
Außerdem sucht der Code in Tabelle "ROH1" Spalte A die Regalbezeichnung und ermittelt die Zeile, in der die Daten für Min, Max, Intervall und Schnittpunkt des betreffenden Diagramms stehen.


Beachte bitte unbedingt folgendes:
1. nicht ganz klar ist, aus welcher Spalte du den angepassten Schnittpunkt der Achse nimmst - das musst du anpassen
2. unklar ist, welche Spalte in Tabelle "ROH1" die Grundlage ist um festzustellen, um welches Regal (also welches Diagramm) es sich handelt - ich bin von Spalte A ausgegangen, musst du also anpassen
Ich habe im Code entsprechende Kommentare hinterlegt, sodass du weißt, auf welche Spalten sich der Code jeweils bezieht.

Bis später
Karin

https://excel-inn.de/
Anzeige
Lösungsvorschlag
19.08.2023 19:06:53
Gregory
Hallo Beverly,

danke für Deine Mühe bis jetzt.

Die 50 Diagramme existieren nicht, diese sollen nur zu jeweiligen Abfragezeiten erstellt werden um es besser zu interpretieren.

Es läuft folgender Maßen ab:

Die Werte werden den ganzen Tag über sporadisch eingespielt und landen über Umwegen in die "ROH1" in der Spalte B ( so wie die anderen Daten in den Spalten C + D )

In der Spalte G wird mit WVerweis die Veränderung bis zu jeweiligen Zeitpunkt aus dem Blatt "ROHES" geholt und in der Spalte "F" der Rang ermittelt.

In den Spalten "J" - "L" werden die Daten sortiert und absteigende geordnet.

In den Spalten "P" - "U" werden die min-max Werte des jeweiligen Wertebereichs aus dem Blatt "ROHES" geholt. Werden für das Diagramm benötigt, min-max Beschriftung etc.. +2% -2% , siehe Das Blatt "AAA" das erste Diagramm.

https://www.herber.de/bbs/user/162384.xlsm

Ich hoffe es ist so verständlich für Dich.

Anzeige
Lösungsvorschlag
19.08.2023 19:27:48
Gregory
Ist die Größe des Diagramms auch per VBA bestimmbar ?

So dass die Diagramme in jedes Kästchen im Blatt "AAA" in die Zeilen "B" bis "P" und drunter reinpassen ?

Rückfrage
19.08.2023 19:29:32
Beverly
Hi Gregory,

in welcher Reihenfolge sollen die Diagramme erstellt werden: fortlaufend Regal_1 bis Regal_50 oder in der Reihenfolge wie sie in Spalte J aufgelistet sind?

Bis später
Karin

https://excel-inn.de/
Rückfrage
19.08.2023 19:31:26
Gregory
Spalte "J"
AW: Rückfrage
19.08.2023 20:25:15
Beverly
In welcher Reihenfolge sollen die Diagramme erstellt werden - Regal_1 bis Regal_50 oder entsprechend der Reihenfolge in Spalte J? Mit anderen Worte: sind die Namen Regal_1 bis Regal_50 bereits in den Zellen B2, D2, F2 usw. fix eingetragen oder müssen diese entsprechend der Reihenfolge auch noch eingetragen werden?

Am Einfachsten ist es, wenn 1 Diagramm, quasi als "Vorlage", bestehen bleibt und dieses dann immer weiter kopiert wird - dann muss die Größe und Formatierung nicht jedesmal neu angepasst werden. Der Aufwand dafür, die Diagramme jedesmal komplett neu zu erstellen und zu formatieren lohnt sich nämlich nicht, da es eben auch anders geht.

Bis später
Karin

https://excel-inn.de/
Anzeige
Rückfrage
19.08.2023 20:55:51
Gregory
Hallo Beverly,

das einzige Diagramm in dem Tabellenblatt "AAA" dienst als Vorlage.

Linie, Fläche, Min + Beschriftung, Max + Beschriftung, Schnittpunkt - ist soweit alles gegeben.
AW: Rückfrage
20.08.2023 09:28:04
Beverly
Das ist mir schon klar - war ja auch mein Vorschlag. Aber du hast meine Fragen leider nicht beantwortet, deshalb komme ich nicht weiter.

Bis später
Karin

https://excel-inn.de/
Rückfrage
20.08.2023 10:37:08
Gregory
Guten Morgen,

bitte um Entschuldigung für meine Unaufmerksamkeit.

Die Sortierung in "AAA" soll gemäß Spalte "J" aus "ROH1" geschehen und sollte auch immer aktualisiert werden.

Ich wäre Dir sehr dankbar dass Du bei Deinem Code ein Kommentar dazuschreibst, damit ich nachvollziehen kann was da gerade passiert, möchte mich mit der VBA mehr beschäftigen.

Danke Dir Beverly!

Anzeige
Lösungswunsch Sparklines - noch offen
20.08.2023 11:13:42
Beverly
Du möchtest jetzt eine völlig andere Lösung - dann stelle ich die Frage auf Offen.

Bis später
Karin

https://excel-inn.de/
Lösungswunsch Sparklines - noch offen
20.08.2023 11:58:38
Gregory
Nein, Nein, so habe ich es nicht gemeint.

Es ist doch nur eine optische Wahrnehmung gemeint gewesen, nur etwas Kosmetik was optisch gut aussieht.

Mir persönlich würde es so ausreichen wie es von Anfang gewünscht war.

Ich bin bereit jede erdenkliche Hilfe anzunehmen die ich bekommen kann.

Sorry und Danke für Deine Mühe bis jetzt !
Anzeige
Diagramme erstellen und Wertebereiche zueisen
20.08.2023 16:14:10
Beverly
Das geht bei "richtigen" Diagrammen nur, indem man in der Zeichenfläche per VBA Shapes erstellt, welche die Flächen zwischen Horizontalachse und Datenreihe ausfüllen und entsprechend unterhalb der Horizonzalachse rot und oberhalb der Horizontalachse grün gefärbt werden. Das macht aus meiner Sicht jedoch keinen Sinn, weil das bei 50 Diagrammen 1. sehr lange dauert und 2. die Performance der Arbeitsmappe ungemein eingeschränken würde.

Hier ein Code, den du mal testen kannst (ausführen wenn "AAA" aktives Blatt ist):

' Start-Makro

Sub DiasErstellen()
Dim lngLetzte As Long
Dim intSpalte As Integer
Dim lngZeile As Long
Dim lngZiel As Long
Dim lngZaehler As Long
Dim chrDia As ChartObject
' mehr Diagramme als nur das "Vorlagen"-Diagramm sind vorhanden dann Makro
' zum Löschen der Diagramme aufrufen
If ActiveSheet.ChartObjects.Count > 1 Then DiasLoeschen
' Spalten B:P leeren
Columns("B:P").ClearContents
lngZiel = 2
lngZaehler = 2
lngLetzte = Worksheets("ROH1").Cells(Rows.Count, 1).End(xlUp).Row
' Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
' "Vorlagen"-Diagramm kopieren
ActiveSheet.ChartObjects(1).Copy
For lngZeile = 2 To lngLetzte
For intSpalte = 2 To 16 Step 2
' jeweils die Regal_Nr. eintragen
Cells(lngZiel, intSpalte) = Worksheets("ROH1").Cells(lngZaehler, 10)
' Kopierts Diagramm einfügen
ActiveSheet.Paste
' Positionen Oben und Links anpassen
With ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count)
.Top = Cells(lngZiel, intSpalte).Top
.Left = Cells(lngZiel, intSpalte).Left
End With
lngZaehler = lngZaehler + 1
If lngZaehler > lngLetzte Then Exit For
Next intSpalte
If lngZaehler > lngLetzte Then Exit For
lngZiel = lngZiel + 3
Next lngZeile
ActiveSheet.ChartObjects(2).Delete
' Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = True
' Makro zum Zuweisen der Wertebereiche aufrufen
DiasWerteZuweisen
Range("A1").Select
End Sub

' Makro zum Zuweisen der betreffenden Wertebereiche
Sub DiasWerteZuweisen()
Dim chrDia As ChartObject
Dim serReihe As Series
Dim lngLetzte As Long
Dim lngZeile As Long
Dim intSpalte As Integer
Dim wks As Worksheet
Dim rngRegal As Range ' Variable für Regal-Nr in "ROHES", Suche in Zeile 1
Dim rngRegal2 As Range ' Variable für Regal-Nr in "ROH1", Suche in Spalte J
Dim dblMin As Double ' Minimum aus Spalte T
Dim dblMax As Double ' Maximum aus Spalte U
Dim dblInt As Double ' Intervall aus Spalte V
Dim dblCross As Double ' Schnittpunkt aus Spalte X
Set wks = Worksheets("ROHES")
lngLetzte = wks.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
' Schleife über alle Diagramme
For Each chrDia In ActiveSheet.ChartObjects
' Suche der Regal_Nr in Zeile 1 in ROHES
Set rngRegal = wks.Rows(1).Find(chrDia.TopLeftCell.Value, lookat:=xlWhole)
' Suche der Regal_Nr in Spalte J in ROH1
Set rngRegal2 = Worksheets("ROH1").Columns(10).Find(chrDia.TopLeftCell.Value, lookat:=xlWhole, LookIn:=xlValues)
chrDia.Select
intSpalte = rngRegal.Column
' Achsenwerte
dblMin = Worksheets("ROH1").Cells(rngRegal2.Row, "T")
dblMax = Worksheets("ROH1").Cells(rngRegal2.Row, "U")
dblInt = Worksheets("ROH1").Cells(rngRegal2.Row, "V")
dblCross = Worksheets("ROH1").Cells(rngRegal2.Row, "X")
' Hauptintervall muss > 0 sein sonst Laufzeitfehler
If dblInt > 0 Then
With chrDia.Chart
' Schleife über alle Datenreihen und Zuweisung der Zellen/Zellbereiche in Abhängigkeit vom Namen
For Each serReihe In .SeriesCollection
Select Case serReihe.Name
Case "Datenreihen1", "FLÄCHE"
serReihe.Values = "=ROHES!" & Range(Cells(30, intSpalte), Cells(lngLetzte, intSpalte)).Address
Case "Beschriftung_min"
serReihe.XValues = "=ROH1!" & Cells(rngRegal2.Row, "P").Address
serReihe.Values = "=ROH1!" & Cells(rngRegal2.Row, "Q").Address
Case "Beschriftung_max"
serReihe.XValues = "=ROH1!" & Cells(rngRegal2.Row, "R").Address
serReihe.Values = "=ROH1!" & Cells(rngRegal2.Row, "S").Address
Case "Start"
serReihe.XValues = "=ROH1!" & Cells(rngRegal2.Row, "W").Address
serReihe.Values = "=ROH1!" & Cells(rngRegal2.Row, "X").Address
Case "Ende"
serReihe.XValues = "=ROH1!" & Cells(rngRegal2.Row, "Y").Address
serReihe.Values = "=ROH1!" & Cells(rngRegal2.Row, "Z").Address
End Select
Next serReihe
' Achsenwerte einstellen
.Axes(xlValue).MinimumScale = dblMin
.Axes(xlValue).MaximumScale = dblMax
.Axes(xlValue).CrossesAt = dblCross
' Diagramm aktualisieren
.Refresh
End With
Else
' Diagramm löschen wenn Hauptintervall = 0 da keine Daten vorhanden
chrDia.Delete
End If
Next chrDia
Application.ScreenUpdating = True
End Sub

' Makro zum Löschen vorhandener Diagramme außer dem "Vorlagen"-Diagramm
Sub DiasLoeschen()
Dim chrDia As ChartObject
Dim intDia As Integer
With Worksheets("AAA")
' mehr als 1 Diagramm sind vorhanden
If .ChartObjects.Count > 1 Then
' alle Diagramme löschen vom zuletzt erstellten bis einschließlich zweitem Diagramm
' sodass das 1. Diagramm immer erhalten bleibt
For intDia = .ChartObjects.Count To 2 Step -1
.ChartObjects(intDia).Delete
Next intDia
End If
End With
End Sub


Bis später
Karin

https://excel-inn.de/
Anzeige
Diagramme erstellen und Wertebereiche zueisen
21.08.2023 11:24:39
Gregory
Hallo Karin oder Beverly,

ich probiere es die ganze Zeit aus und es funktioniert.

Weil es soviel aufmal ist für mich, brauche ich etwas Zeit um es alles zu überblicken.

Ich schreibe morgen oder übermorgen dazu, habe beruflich kleiner Herausforderungen.

Was ich aber bis jetzt alles gesehen habe, kann ich nur schreiben dass es super funktioniert und ich sprachlos bin was alles mit vba geht...

DANKE, DANKE, DANKE DIR !!!
Diagramme erstellen und Wertebereiche zueisen
22.08.2023 23:13:46
Gregory
Guten Abend,

so habe hin und her ausprobiert.

Soweit sehr gut, danke!

Habe ich es richtig gesehen dass die Datenwerte in den Diagrammen nicht mit Bereichsnamen angesprochen werden ? Die benötige ich aber für eine Simulation.
Ich meine wenn es nicht anders umgesetzt werden kann dann werde ich es natürlich auch so genießen !!

Irgendeine Frage habe ich noch gehabt, fällt mir bestimmt noch ein.

Ich danke Dir vielmals Karin & Beverly !
Anzeige
AW: Diagramme erstellen und Wertebereiche zueisen
23.08.2023 09:34:51
Beverly
Hi Gregory,

ich verstehe dein Problem nicht. Es war dein Wunsch, dass die Diagramme OHNE definierte Namen funktionieren - das tun sie nun, denn jeweils nach Ausführung des Codes, wird ihnen ihr Wertebereich neu, und zwar fix zugewiesen. Was soll denn nun anders umgesetzt werden???!!!

Bis später
Karin

https://excel-inn.de/

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Anzeige

Infobox zum Thema

EXCEL - VBA - Mehrere Diagramme über eine Schleife nacheinander erstellen


Inhaltsverzeichnis


Die Fragestellung


Du möchtest mit VBA in Excel mehrere Diagramme erstellen, wobei jedes Diagramm nacheinander über eine Schleife generiert werden soll.


Erläuterung des Problems {#erläuterung-des-problems}


Das manuelle Erstellen von Diagrammen kann zeitaufwendig sein, besonders wenn du eine Serie von Diagrammen basierend auf unterschiedlichen Datenbereichen erstellen musst.


Lösung des Problems {#lösung-des-problems}


Du kannst eine VBA-Schleife verwenden, um eine Serie von Diagrammen automatisch zu erstellen. Hier ist ein Beispielcode, der zeigt, wie das funktionieren kann:

Sub CreateMultipleCharts()
    Dim ws As Worksheet
    Dim chartRange As Range
    Dim i As Integer
    Dim chartObj As ChartObject

    ' Das Arbeitsblatt festlegen, in dem die Diagramme erstellt werden sollen
    Set ws = ThisWorkbook.Sheets("Datenblatt") ' Namen anpassen

    ' Schleife, die für jede Datenserie ein Diagramm erstellt
    For i = 1 To 5 ' Anzahl der zu erstellenden Diagramme anpassen

        ' Den Datenbereich für das aktuelle Diagramm festlegen
        ' Hier musst du die Logik anpassen, um den richtigen Bereich zu wählen
        Set chartRange = ws.Range("A1:B10").Offset((i - 1) * 10, 0)

        ' Ein neues Diagrammobjekt erstellen
        Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=i * 150, Height:=225)

        ' Diagramm mit Daten füllen
        With chartObj.Chart
            .SetSourceData Source:=chartRange
            .ChartType = xlColumnClustered ' Diagrammtyp anpassen
            ' Weitere Diagrammeigenschaften hier anpassen
        End With
    Next i
End Sub

In diesem Code wird angenommen, dass die Daten für jedes Diagramm in den Spalten A und B stehen und jede Datenserie 10 Zeilen umfasst. Die Offset-Methode wird verwendet, um den Bereich für jedes neue Diagramm zu verschieben.


Anwendungsbeispiele aus der Praxis


  • Berichterstattung: Erstellung einer Serie von Diagrammen für einen Bericht oder eine Präsentation.
  • Datenanalyse: Visualisierung verschiedener Datensätze zur leichteren Analyse.

Tipps


  • Passe die Position (Left, Top) und Größe (Width, Height) der Diagramme an, um sie an dein Arbeitsblatt anzupassen.
  • Ändere den ChartType für verschiedene Arten von Diagrammen, je nachdem, was du visualisieren möchtest.

Verwandte Themenbereiche


  • Automatisierung von Excel-Aufgaben
  • Visualisierung von Daten
  • VBA-Programmierung

Zusammenfassung


Mit VBA kannst du eine Schleife verwenden, um automatisch eine Serie von Diagrammen in Excel zu erstellen. Dies spart Zeit und stellt sicher, dass alle Diagramme einheitlich formatiert sind. Der obige Code kann als Grundlage dienen und sollte an die spezifischen Anforderungen deiner Daten und des gewünschten Diagrammtyps angepasst werden.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige