Guten Morgen zusammen,
ich habe zig Datensätze aus verschiedenen Datenbanken, welche jeweils in x-Richtung eine Zeitachse und in y-Richtung eine Anzahl von was auch immer haben. Zusätzlich habe ich mir einen Datensatz "Gesamt" erstellt, dessen x-Achse den Zeitraum <frühestes Datum aller Datenreihen> bis <spätestes Datum aller Datenreihen> beinhaltet.
ich möchte alle Datensätze mittels VBA gemeinsam in einem Liniendiagramm darstellen, sodass die x-Achse den GESAMT-Zeitraum darstellt und die jeweilige Datenreihe dann eben nur einen Teil der x-Achse ausnutzt.
x 1 2 3 4 5 6 7 8 9 10 11 12
y1 1 1 2 3 5 4 3 2
y2 1 2 7 4 3
y3 1 2 8 5 3 2 1 0
yges 1 2 8 5 6 5 13 9 6 4 1 0
ich habe beispielsweise diese Tabelle in den Zellen A1 bis M5 stehen. wenn ich manuell ein Chart erstelle und die 4 Datenreihen mit x- und y-Bereichen hinzufüge, passiert genau das was ich möchte.
Mit folgendem Code:
Sub chartTest()
Dim idxRowX As Integer
Dim idxColLeg As Integer
Dim idxFirstCol As Integer
Dim idxLastCol As Integer
Dim idxRow
Dim idxLastRow As Integer
Dim ws As Worksheet
Dim s As Series
Set ws = ActiveWorkbook.Worksheets("Tabelle7")
Dim ch As Chart
Set ch = ws.Shapes.AddChart.Chart
ch.ChartType = xlLineMarkers
'aus irgendeinem Grund wählt Excel erstmal die richtigen Daten aus und fügt sie hinzu, das will ich aber ja nicht
For Each s In ch.SeriesCollection
s.Delete
Next s
idxColLeg = 1
idxRowX = rowIndex("x", idxColLeg)
idxLastRow = ws.Cells(Rows.Count, idxColLeg).End(xlUp).Row
For idxRow = 1 To idxLastRow
If idxRow = idxRowX Then GoTo nextIdxRow
If Not IsEmpty(ws.Cells(idxRow, idxColLeg + 1)) Then idxFirstCol = idxColLeg + 1 Else idxFirstCol = ws.Cells(idxRow, idxColLeg).End(xlToRight).Column
idxLastCol = ws.Cells(idxRow, ws.Columns.Count).End(xlToLeft).Column
ch.SeriesCollection.Add Source:=ws.Range(ws.Cells(idxRow, idxFirstCol), ws.Cells(idxRow, idxLastCol))
Set s = ch.SeriesCollection(ch.SeriesCollection.Count)
s.name = ws.Cells(idxRow, idxColLeg).Value
s.XValues = ws.Range(ws.Cells(idxRowX, idxFirstCol), ws.Cells(idxRowX, idxLastCol))
nextIdxRow:
Next idxRow
End Sub
werden die Series hinzugefügt, wenn man die Series im Nachgang anklickt wird auch der richtige x-Wertebereich angezeigt. Die x-Achse hat dann (augrund der Reihe y1) den Wertebereich 3 bis 10 und alle weiteren Linien beginnen mit ihrem ersten Punkt bei x = 3, unabhängig davon, welchen x-Wert der erste Datenpunkt repräsentiert
Habt ihr Tips für mich?
Ich hoffe die Frage / mein Anliegen ist halbwegs verständlich formuliert
Grüße
Steffen
|