Thema Datum  Von Nutzer Rating
Antwort
Rot SeriesCollection.Series.xValue
03.08.2017 08:18:52 Steffen
NotSolved
08.08.2017 20:41:49 Mackie
NotSolved

Ansicht des Beitrags:
Von:
Steffen
Datum:
03.08.2017 08:18:52
Views:
1071
Rating: Antwort:
  Ja
Thema:
SeriesCollection.Series.xValue

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot SeriesCollection.Series.xValue
03.08.2017 08:18:52 Steffen
NotSolved
08.08.2017 20:41:49 Mackie
NotSolved