Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

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

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

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

158 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige