Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Diagramm mit zwei Datenreihen VBA

Diagramm mit zwei Datenreihen VBA
13.06.2013 14:35:28
Kapitän
Hallo Exel/VBA Gemeinde!
ich habe vor einigen Stunden angefangen mich mit VBA zu beschäftigen, weil ich (natürlich) eine größere Anzahl von Daten auszuwerten habe.
Ich habe unten mal den QCode eingefügt.
Im ersten Teil werden csv-Dateien in mein ExelSheet geschrieben. Klappt auch alles ganz super!
..und dann wollte ich noch schnell zu jedem Datenblock ein Diagramm machen. Dabei Soll die 3. Spalte (des jeweiligen Blocks) als x-Achse (Werte) und die 5. als die dazugehörigen Werte dargestellt werden. Leider klappt das nicht!
Habs auch schon mit dem Makrorekorder versucht, doch es gibt immerwieder einen Fehler (Fehler: 1004) in der Zeile:
"'ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("Cells(8, k + 2)":"Cells(Zeile,k+2)"; "Cells(8, k + 4)":"Cells(Zeile,k+4)"), _" 
auch wenn ich sie mit dem Rekorder aufnehme und sie ganz unkryptisch als:
"ActiveChart.SetSourceData Source:=Range("'Tabelle1'!$C$7:$C$425;'Tabelle1'!$E$7:$E$425")" 
geschrieben wird.
Kann mir jemand sagen, was hier falsch ist? Und dann vielleicht noch, wie ich zu jedem durchlauf der Schleife ein weiteres Diagramm bekomme?
Ich bin für jede Hilfe dankbar!
Gruß
Kapitän

Dim Str_String As String
k = 1
pfad_data = Dir("C:\Users\test*.csv")
Do While pfad_data  ""
'Datei auslesen
Set FSO = CreateObject("Scripting.FilesystemObject")
Set Datei = FSO.Opentextfile("C:\Users\" & pfad_data)  'Anpassen
Str_String = Datei.readall
Datei.Close
intFile = FreeFile
Arr = Split(Str_String, vbCrLf) 'Nach Datensätzen splitten
ReDim Dat_Ausgabe(UBound(Arr), 5)
For L = 0 To UBound(Arr)
Tmp = Split(Arr(L), ",") 'Datensatz nach Werten splittenn
For i = 0 To UBound(Tmp)
Tmp(i) = Replace(Tmp(i), """", "")
Dat_Ausgabe(L, i) = Tmp(i) 'Werte in Dat_Ausgabe
Next
Next
'Ausgeben. Anpassen.
Sheets("Tabelle1").Cells(3, k).Resize(UBound(Dat_Ausgabe) + 1, UBound(Dat_Ausgabe, 2)) = _
_
Dat_Ausgabe
'Diagramm
'Zeile = ActiveSheet.Cells(Rows.Count, k).End(xlUp).Row 'letzte Zeile
'Charts.Add
'ActiveChart.ChartType = xlXYScatter
'ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("Cells(8, k + 2)":"Cells( _
Zeile,k+2)"; "Cells(8, k + 4)":"Cells(Zeile,k+4)"), _
'ActiveChart.SeriesCollection(1).Delete
'ActiveChart.Location Where:=xlLocationAsObject, Name:="Cells(4, k)"
k = k + 6
pfad_data = Dir
Loop
End Sub

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm mit zwei Datenreihen VBA
13.06.2013 16:10:21
Rudi
Hallo,
  zeile = ActiveSheet.Cells(Rows.Count, k).End(xlUp).Row
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Values = Sheets(1).Range(Sheets(1).Cells(8, k + 4), Sheets(1).Cells(zeile, k + 4))
.XValues = Sheets(1).Range(Sheets(1).Cells(8, k + 2), Sheets(1).Cells(zeile, k + 2))
End With
.Location Where:=xlLocationAsObject, Name:=Sheets(1).Cells(4, k)
End With

Gruß
Rudi

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
13.06.2013 16:51:10
Kapitän
Hi Rudi,
danke für die Antwort. Das mit den values sieht schon ganz gut aus, weil jetzt auch die Cells-Ausdrücke funktionieren.
Allerdings werden mir jetzt alle Datenreihen von Spalte A bis F Als Funktion über die Anzahl der Zeilen in einem Diagramm angezeigt.
Ich habe mehrere Datensätze mit 6Spalten und unterschiedlichen Längen (in den jeweiligen Datensätzen aber gleich)
Was ich anstrebe sind ein Diagramm pro Datensatz, was z.B. Messwerte von Geschwindigkeiten über einen Weg zeigt.
Außerdaem hatte der Compiler Probleme mit der Zeile:

Location Where:=xlLocationAsObject, name:=Sheets(k).Cells(4, k)
Ich denke dein Ansatz geht in die richtige Richtung. Wie muss man also die Argumente im Range() ändern? Und wie sorge ich dafür, dass ich bei jedem durchlaufen der Do-while-Schleife ein neues Diagramm erhalte?
Danke für die Hilfe!
Kapitän

Anzeige
Weiß niemend weiter?
14.06.2013 15:32:43
Kapitän
Ich nochmal..
ich habe mir schon meine Finger wund gegoogelt. Weiß denn keiner was beim Range() bzw. den Cells()-Befehlen schief gelaufen ist, damit im ersten Durchlauf der Do-While Schleife nur die Daten aus den Spalten C und E genommen werden?
Vermute, dass dann die richtigen Werte (Spalte C im ersten Durchlauf) als x-Achse aufgetragen werden und die Werte aus Spalte E die jeweiligen Werte zu x.
Sehe bei dem Cells befehl nicht durch. Für mich scheint der QCode von Rudi richtig und logisch. Wieso werden mir aber alle Datenreihen von A-F (beim ersten Durchlaufen der DO-While) über der Anzahl der Zeilen aufgetragen.
Wahrscheinlich ist irgendwo ein winziger Fehler versteckt!?
Ich freue mich sehr über Gedanken, Tipps, Vorschläge!
Gruß,
Kapitän

Anzeige
AW: Weiß niemend weiter?
14.06.2013 23:45:16
Rudi
Hallo,
lad doch mal ne Musterdatei hoch.
Gruß
Rudi

AW: Weiß niemend weiter?
17.06.2013 15:42:57
Kapitän
Hallo!
Hab hier mal ein Beispielsheet erstellt(ohne Makro), aber so ist vielleicht nachvollziehbar warum ich mein erwünschtes Ergebnis nicht erhalte (jeweils ein Diagramm pro Datenreibe mit jeweils den Spalten 3 und 5) bzw. Daten aus der dritten Spalte mit den dazugehörigen Werten der 5.Spalte.
https://www.herber.de/bbs/user/85868.xlsx
Danke für eure (Rudis) hinweise!
Kapitän

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
17.06.2013 15:24:18
Kapitän
Hallo!
Hab hier mal ein Beispielsheet erstellt(ohne Makro), aber so ist vielleicht nachvollziehbar warum ich mein erwünschtes Ergebnis nicht erhalte (jeweils ein Diagramm pro Datenreibe mit jeweils den Spalten 3 und 5) bzw. Daten aus der dritten Spalte mit den dazugehörigen Werten der 5.Spalte.
https://www.herber.de/bbs/user/85868.xlsx
Danke für eure (Rudis) hinweise!
Kapitän

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
17.06.2013 15:39:36
Kapitän
Hallo!
Hab hier mal ein Beispielsheet erstellt(ohne Makro), aber so ist vielleicht nachvollziehbar warum ich mein erwünschtes Ergebnis nicht erhalte (jeweils ein Diagramm pro Datenreibe mit jeweils den Spalten 3 und 5) bzw. Daten aus der dritten Spalte mit den dazugehörigen Werten der 5.Spalte.
https://www.herber.de/bbs/user/85868.xlsx
Danke für eure (Rudis) hinweise!
Kapitän

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
17.06.2013 16:37:58
Rudi
Hallo,
Sub Diagramme()
Dim zeile, k
For k = 1 To 19 Step 6
zeile = Sheets(1).Cells(Rows.Count, k).End(xlUp).Row
With Sheets(1).Shapes.AddChart.Chart
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Values = Sheets(1).Range(Sheets(1).Cells(8, k + 4), Sheets(1).Cells(zeile, k + 4))
.XValues = Sheets(1).Range(Sheets(1).Cells(8, k + 2), Sheets(1).Cells(zeile, k + 2))
End With
Worksheets.Add(after:=Sheets(1)).Name = Sheets(1).Cells(4, k)
.Location Where:=xlLocationAsObject, Name:=Sheets(1).Cells(4, k)
End With
Next
End Sub
Gruß
Rudi

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
18.06.2013 11:11:49
Kapitän
Hallo nochmal:)
Habe jetzt deinen QCode übernommen und ein bisschen abgewandelt, weil die Datensätze die eingelesen werden sollen variabel in der Anzahl sind und deshalb auch immer unterschiedlich viele Diagramme erstellt werden sollen.
Sub Diagramme()
Dim zeile, iSpalte, k
iSpalte = Cells(8, Columns.Count).End(xlToLeft).Column
For k = 1 To iSpalte Step 6
zeile = Sheets(8).Cells(Rows.Count, k).End(xlUp).Row
With Sheets(8).Shapes.AddChart.Chart
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Values = Sheets(8).Range(Sheets(8).Cells(8, k + 4), Sheets(8).Cells(zeile, k + 4))
.XValues = Sheets(8).Range(Sheets(8).Cells(8, k + 2), Sheets(8).Cells(zeile, k + 2))
.name = Sheets(8).Cells(4, k)
End With
'Worksheets.Add(after:=Sheets(1)).name = Sheets(1).Cells(4, k)
'.Location Where:=xlLocationAsObject, name:=Sheets(1).Cells(4, k)
End With
Next
End Sub
Location Where funktioniert immernoch nicht. Aber noch dümmer: In den Diagrammen werden neben den Datenreihen 3 und 5 als x und y auch noch 11 weitere Spalten über die Anzahl der Zeilen aufgetragen. Ich vermute, dass es was mit den Bezügen in den Klammern zu tun hat.. Habe bei den Sheets () bereits eine 8 in die Klammern gesetzt, weil es mein 8. sheet ist. Wie mache ich es nun mit dem Bezug von SeriesCollection(), dieser Wert ist bei mir ja eine Variable. Habe es schon mit einer FOR-Schleife versucht, wobei ich eine Variable von 1 bis zur Endanzahl der Spalten/6 zähle. Die "6" ist bei mir die "Breite/ Spaltenanzahl" eines Datensatzes.
Leider ohne Erfolg!
DankeDankeDanke!
Kapitän

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
18.06.2013 11:51:26
Kapitän
habe gerade gemerkt, dass der Zähler für SeriesCollection, dann ja eigendlich nur solange von 1 immer einen weiter zählen muss, bis die FOR-Schleife durchlaufen ist.
Also:

Sub Diagramme()
Dim zeile, iSpalte, k, i
iSpalte = Cells(8, Columns.Count).End(xlToLeft).Column
i = 1
For k = 1 To iSpalte Step 6
zeile = Sheets(8).Cells(Rows.Count, k).End(xlUp).Row
With Sheets(8).Shapes.AddChart.Chart
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
With .SeriesCollection(i)
.Values = Sheets(8).Range(Sheets(8).Cells(8, k + 4), Sheets(8).Cells(zeile, k + 4))
.XValues = Sheets(8).Range(Sheets(8).Cells(8, k + 2), Sheets(8).Cells(zeile, k + 2))
.name = Sheets(8).Cells(4, k)
End With
'Worksheets.Add(after:=Sheets(1)).name = Sheets(1).Cells(4, k)
'.Location Where:=xlLocationAsObject, name:=Sheets(1).Cells(4, k)
End With
i = i + 1
Next
End Sub

Oder bin ich auf dem Holzweg?
Gruß
Kapitän

Anzeige
AW: Diagramm mit zwei Datenreihen VBA
18.06.2013 14:01:45
Rudi
Hallo,
Aber noch dümmer: In den Diagrammen werden neben den Datenreihen 3 und 5 als x und y auch noch 11 weitere Spalten über die Anzahl der Zeilen aufgetragen.
Das ist das Eigenleben von Excel, A1 auf dem Datenblatt zu selecten schaft Abhilfe.
Sub Diagramme()
Dim zeile, k, rngX As Range, rngY As Range
Dim wsDaten As Worksheet
Application.ScreenUpdating = False
Set wsDaten = Sheets(8)
wsDaten.Select
Range("A1").Select
For k = 1 To Cells(4, Columns.Count).End(xlToLeft).Column Step 6
With wsDaten
zeile = .Cells(.Rows.Count, k).End(xlUp).Row
Set rngX = .Range(.Cells(8, k + 2), .Cells(zeile, k + 2))
Set rngY = rngX.Offset(, 2)
With .Shapes.AddChart.Chart
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Values = rngY
.XValues = rngX
.Name = wsDaten.Cells(4, k)
End With
.Location Where:=xlLocationAsNewSheet, Name:=wsDaten.Cells(4, k)
End With
End With
Next
End Sub

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Diagramm mit zwei Datenreihen in Excel VBA erstellen


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass Deine Daten in einem Excel-Arbeitsblatt gut strukturiert sind. In diesem Beispiel gehen wir davon aus, dass Deine Daten in den Spalten C und E liegen.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul hinzufügen: Klicke mit der rechten Maustaste auf VBAProject (DeinWorkbookName) und wähle Einfügen > Modul.

  4. VBA-Code einfügen: Verwende den folgenden Code, um ein Diagramm mit zwei Datenreihen zu erstellen:

    Sub Diagramme()
       Dim zeile As Long, k As Long
       For k = 1 To 19 Step 6
           zeile = Sheets(1).Cells(Rows.Count, k).End(xlUp).Row
           With Sheets(1).Shapes.AddChart.Chart
               .ChartType = xlXYScatter
               .SeriesCollection.NewSeries
               With .SeriesCollection(1)
                   .Values = Sheets(1).Range(Sheets(1).Cells(8, k + 4), Sheets(1).Cells(zeile, k + 4))
                   .XValues = Sheets(1).Range(Sheets(1).Cells(8, k + 2), Sheets(1).Cells(zeile, k + 2))
                   .Name = "Datenreihe " & k
               End With
               .Location Where:=xlLocationAsNewSheet
           End With
       Next k
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler 1004: Dieser Fehler tritt häufig auf, wenn der Range-Befehl nicht korrekt ist. Achte darauf, dass Du die richtige Syntax verwendest, z.B.:

    ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("C8:C425,E8:E425")
  • Mehrere Datenreihen angezeigt: Wenn Du mehr Datenreihen als gewünscht siehst, überprüfe die Range-Angaben in Deinem Code. Stelle sicher, dass Du nur die gewünschten Spalten und Zeilen auswählst.


Alternative Methoden

Eine alternative Methode zur Erstellung von Diagrammen in Excel ist die Verwendung des Excel-Diagrammassistenten. Dabei kannst Du die gewünschten Daten manuell auswählen, ohne VBA zu verwenden. Dies kann besonders hilfreich sein, wenn Du visuell arbeiten möchtest.


Praktische Beispiele

Hier ist ein Beispiel, wie Du ein Excel Liniendiagramm mit mehreren Datenreihen erstellen kannst:

Sub LiniendiagrammErstellen()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    With ws.Shapes.AddChart.Chart
        .ChartType = xlLine
        .SetSourceData Source:=ws.Range("A1:B10")
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = ws.Range("A1:A10") ' X-Werte
        .SeriesCollection(1).Values = ws.Range("B1:B10")  ' Y-Werte
    End With
End Sub

Tipps für Profis

  • Diagramm anpassen: Nutze die Eigenschaften der Chart-Objekte, um das Diagramm zu gestalten. Du kannst z.B. die Farben, Linienarten und Beschriftungen anpassen.

  • Daten dynamisch laden: Verwende SetSourceData in Kombination mit Variablen, um Diagramme dynamisch basierend auf den Daten zu aktualisieren.

ActiveChart.SetSourceData Source:=Range("Daten!A1:B" & zeile)
  • Fehlerbehandlung einbauen: Implementiere On Error Resume Next, um Fehler während der Ausführung des Makros zu ignorieren und Probleme effizient zu diagnostizieren.

FAQ: Häufige Fragen

1. Wie füge ich eine zusätzliche Datenreihe zu meinem Diagramm hinzu?
Verwende SeriesCollection.NewSeries und setze die Werte für .XValues und .Values im VBA-Code.

2. Warum wird mein Diagramm nicht angezeigt?
Stelle sicher, dass Du die Methode .Location korrekt verwendest, um das Diagramm an der gewünschten Stelle zu platzieren, z.B. in einem neuen Arbeitsblatt oder als Objekt im aktuellen Blatt.

3. Wie kann ich ein Kreisdiagramm mit mehreren Datenreihen erstellen?
Verwende den Diagrammtyp xlPie im entsprechenden VBA-Code und passe die Datenbereiche an.

4. Funktioniert dieser Code in allen Excel-Versionen?
Der bereitgestellte Code sollte in den meisten modernen Excel-Versionen (z.B. Excel 2016, 2019 und Office 365) funktionieren. Achte auf Unterschiede in den Diagrammtypen und Eigenschaften in älteren Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige