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

Diagramm mit mehreren Bezügen auf div. Tabellenblä

Diagramm mit mehreren Bezügen auf div. Tabellenblä
28.10.2013 22:45:51
Benni
Hallo liebe VBA-Spezialisten,
hoffe Ihr könnt mir bei einem Auswerteproblem helfen. Bin leider nicht fit in VBA.
Folgendes Problem:
In einer Excel-Datei befinden sich einige Tabellenblätter (Werte1.....Werte10). Der Aufbau der jeweiligen Tabellenblätter ist immer identisch. Ich muss nun aus immer festen Bezügen, aus allen Tabellenblättern, ein Diagramm erstellen. Jedes Tabellenblatt enthält 3 Datenreihen. Somit ergeben sich aus 10 Tabellenblättern und jeweils 3 Datenreihen 30 Linien in einem Diagramm.
Die einzelnen "Adressen" der Datenreihen sind immer pro Tabellenblatt gleich. z.B.
Datenreihe 1: Werte1 (Tabellenbaltt) // x-Werte von A6:A1000 // y-Werte von C6:C1000 // Name auf B1
Datenreihe 2: Werte1 // x-Werte von D6:D1000 // y-Werte von F6:F1000 // Name auf E1
Datenreihe 3: Werte1 // x-Werte von G6:G1000 // y-Werte von I6:I1000 // Name auf H1
Datenreihe 4: Werte2 // x-Werte von A6:A1000 // y-Werte von C6:C1000 // Name auf B1
Datenreihe 5: Werte2 // x-Werte von D6:D1000 // y-Werte von F6:F1000 // Name auf E1
Datenreihe 6: Werte2 // x-Werte von G6:G1000 // y-Werte von I6:I1000 // Name auf H1
Das Diagramm soll als neues Tabellenblatt ausgegeben werden.
Aufgrund der immer festen "Adressen" wird hier vermutlich eine Schleife am einfachsten sein.
Wäre echt super, wenn mir einer von Euch helfen könnte.
Vielen vielen Dank an alle helfende User.
Grüße
Benni

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:17:03
Arthur
Hallo Benni.
Mein Vorschlag ist die Datenreiehen in einem separaten Tabellenblatt zusammen zu stellen und darauf das Diagramm laufen zu lassen. Zur Not das Tabellenblatt ausblenden. Dann ist kein VBA notwendig und die spätere Wartung des Codes ebensowenig.
Gruß, Arthur

AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:37:58
fcs
Hallo Benni,
im einfachsten Fall sieht so ein Makro wie folgt aus.
mfg
Franz
Sub MakeDiagram()
Dim wks As Worksheet, intI As Integer
Dim intRange As Integer
Dim strRange_X As String, strRange_Y As String, strRange_Name As String
Dim objChart As Chart, wksDiagramm As Worksheet
Dim objReihe As Series
ActiveWorkbook.Worksheets.Add before:=ActiveWorkbook.Sheets(1)
Set wksDiagramm = ActiveSheet
wksDiagramm.Shapes.AddChart
Set objChart = wksDiagramm.ChartObjects(1).Chart
objChart.ChartType = xlXYScatterLinesNoMarkers
For intI = 1 To 10
Set wks = ActiveWorkbook.Worksheets("Werte" & Format(intI, "0"))
For intRange = 1 To 3
strRange_X = "='" & wks.Name & "'!" _
& wks.Range("A6:A1000").Offset(0, (intRange - 1) * 3).AddressLocal
strRange_Y = "='" & wks.Name & "'!" _
& wks.Range("D6:D1000").Offset(0, (intRange - 1) * 3).AddressLocal
strRange_Name = "='" & wks.Name & "'!" _
& wks.Range("B1").Offset(0, (intRange - 1) * 3).AddressLocal
Set objReihe = objChart.SeriesCollection.NewSeries
With objReihe
.Name = strRange_Name
.XValues = strRange_X
.Values = strRange_Y
End With
Next intRange
Next intI
End Sub

Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:45:09
Beverly
Hi Benni,
Sub DiaErstellen()
Dim wksTab As Worksheet
Dim intReihe As Integer
Dim intSpalte As Integer
intSpalte = 1
With ActiveSheet.Shapes.AddChart(10, 10, 500, 350).Chart
.ChartType = xlXYScatterLines
For Each wksTab In Worksheets
If InStr(wksTab.Name, "Werte") > 0 Then
For intReihe = 1 To 3
With .SeriesCollection.NewSeries
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), _
wksTab.Cells(11, intSpalte))
.Values = wksTab.Range(wksTab.Cells(6, intSpalte + 2), _
wksTab.Cells(11, intSpalte + 2))
.Name = wksTab.Cells(1, intSpalte + 1)
End With
intSpalte = intSpalte + 3
Next intReihe
intSpalte = 1
End If
Next wksTab
End With
End Sub


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 21:35:30
Benni
Hallo Beverly,
vielen Dank für deine Antwort.
Komme mit dem Code nicht ganz klar. Wo finde ich die Zuordnung der einzelnen x/y-Werte bzw. Namen. Kann dies auch mit den für mich ersichtlichen Adressen (z.B. C6:C1000) umgesetzt werden? Würde den Code auch gerne für zukünftige Auswertungen verwenden wo sich die "Adressen" für x/y-Werte bzw. Namen ändern.
Viele Grüße
Benjamin

AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 21:58:40
Beverly
Hi Benjamin,
If InStr(wksTab.Name, "Werte") > 0 Then
in dieser Zeile wird festgelegt, dass im Namen der Tabellenblätter, die für die Auswertung herangezogen werden sollen, der Begriff "Werte" enthatlten sein muss.
Der Code für die Datenreihen läuft in einer Schleife über die 9 Spalten in 3er Schritten, denn jeweils 3 Spalten gehören zu einer Datenreihe.
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), wksTab.Cells(11, intSpalte))
gibt an, dass die X-Werte den Spalten 1 (A), 4 (D) und 7 (G) entnommen werden sollen, da die Schleife in 3er Schritten von 1 bis 9 läuft. In meinem Beispiel sind es die Zeilen 6 bis 11 (das musst du an deine tatsächlichen Bedingungen anpassen).
.Values = wksTab.Range(wksTab.Cells(6, intSpalte + 2), wksTab.Cells(11, intSpalte + 2))
die Y-Werte werden den Spalten 3 (C), 6 (F) und 9 (I) entnommen (laufende Spalte + 2)
.Name = wksTab.Cells(1, intSpalte + 1)
der Name wird den Spalten 2 (B), 5 (E) und 8 (H) in Zeile 1 entnommen (laufende Spalte + 1)
In wieweit du das für künftige Diagramme verwenden kannst, kann ich nicht beurteilen - wenn die Bedingungen die selben bleiben, dann ja, andernfalls musst du den Code an die geänderten Bedingugne anpassen.
Einen Universalcode gibt es nicht - er hängt immer von den ganz konkreten Bedingungen ab.


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 08:51:23
Benni
Hallo Beverly,
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), wksTab.Cells(11, intSpalte))
gibt an, dass die X-Werte den Spalten 1 (A), 4 (D) und 7 (G) entnommen werden sollen
Wo finde ich hier die Spalten? Es ist für mich nur der Bereich 6 bis 11 ersichtlich.
Ist eine integration nach dem Adressenformat auch mölich? Finde das nachvollziehbarer.
Vielen Dank für den aktuellen Code. Hat mir sehr viel Arbeit abgenommen und funktioniert.
Grüße
Benjamin

AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 09:15:01
Beverly
Hi Benjamin,
es gibt die Darstellungsmöglichkeit für einen Zellbezug als Range("A6:A1000") oder als Range(Cells(6, 1), Cells(1000, 1)) - bei Cells also in der umgekehrten Reihenfolge für Spalte und Zeile wie bei Range als Cells(Zeile, Spalte). Schau dir dazu auch mal die VBA-Hilfe an.
Man kann selbstverständlich auch Cells(Zeile, "A") schreiben, wobei Zeile eine Zahl und die Spalte als Buchstabe angegeben ist. In deinem Fall ist "A" aber nicht konstant, sondern aus A muss im nächsten Durchlauf D und dann G werden, d.h. die Spalte ändert sich dynamisch, da sie ja in der Schleife in3er Schritten abgearbeitet wird. Dazu wird die Variable intSpalte verwendet, die sich in der Schleife durch die 3er Schritte von 1 (A) auf 4 (D) und auf 7 (G) ändert.
Wenn du alles in deiner Range-Schreibweise haben willst, dann kannst du keine Schleife verwenden sondern musst jeden Zellbereich einzeln benennen:
               With .SeriesCollection.NewSeries
.XValues = wksTab.Range("A6:A1000")
.Values = wksTab.Range("C6:C1000")
.Name = wksTab.Range("B1")
End With
With .SeriesCollection.NewSeries
.XValues = wksTab.Range("D6:D1000")
.Values = wksTab.Range("F6:F1000")
.Name = wksTab.Range("E1")
End With
With .SeriesCollection.NewSeries
.XValues = wksTab.Range("G6:D1000")
.Values = wksTab.Range("I6:I1000")
.Name = wksTab.Range("H1")
End With


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 18:35:39
Benni
Hallo Beverly,
ich probier das Morgen mal aus.
Nochmals vielen Dank für deine intensiven Erläuterungen.
Grüße
Benni

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige