VBA: Diagramm Datensatzhinzufügen wenn
#1
Hallo Zusammen,

ich möchte für ein Diagramm X-Achse = Berichtszeitpunkt [Format: Datum], Y-Achse = Prognosedatum [Format: Datum] ein dynamisches Diagramm erstellen.

Für die X-Achse sind Spalten vom 01.01.2019 bis 31.12.2022 vorbereitet. Je nach Start und Ende der Laufzeit soll sich der Datenbereich der Quelldaten anpassen. Das bekomme ich hin indem ich in einer Zeile für jedes in Frage kommende Datum eine 1 setze. Der Datenbereich der Quelldaten = da wo die Zellen der Daten gleich 1 sind (mit einem Offset). Der Datenbereich eines Datensatzes = der Bereich mit mit jeweiligem Offset.


Es gibt eine variable Zahl an Datensätzen, die das Diagramm in der Y-Achse enthalten soll. Ein VBA-Code soll also lesen, wie viele befüllte Zeilen enthalten sind (= Anzahl der Datensätze). Und dann diesen Datenbereich mit einen Offset für die Zellen gleich 1 auswählen.

Meine eigentliche Frage ist gar nicht der komplette Code sondern:

WIe lautet ein korrekter Ausdruck in VBA, um in einen Diagramm die X-Achse mit einem Datenbereich wo Zellen=1 mit Offset=x zu festzusetzen
und je nach Anzahl der Zeilen einen seperaten Datensatz für die Y-Achse wo Zellen=1 mit Offset=befüllte Zeile hinzuzufügen?

Danke
Top
#2
Hallo

ich sehe es gibt noch keine Antwort, deshalb mein Tipp. Das Diagramm von Hand aendern und dabei den Makro Recorder mitlaufen lassen. 
Hat man einen Code kann man den beliebig anpassen. Aus dem Kopf raus weiss ich auch nicht wie das geht, würde es aufzeichnen!

mfg Gast 123
Top
#3
Hallo,

ich müsste die Spaltenreichweite auch variabel gestalten aber es klappt ja noch nicht einmal diese Formel :D In dem Fall wäre die Letzte Zeile 14. Der Code bewirkt entweder garnix oder erstellt 2 leere Datenreihen im Diagramm.

Sub Test2()
Dim LetzteZeile As Long
With Sheets("Meilensteintrendanalyse")
LetzteZeile = Cells(Rows.Count, 3).End(xlUp).Row
 
    For i = 9 To LetzteZeile
    ActiveSheet.ChartObjects("Diagramm 4").Activate
  ActiveChart.SeriesCollection.NewSeries
   ActiveChart.FullSeriesCollection(i).name = Range(.Cells(i, 3), .Cells(i, 3))
   ActiveChart.FullSeriesCollection(i).XValues = Range(.Cells(i, 15), .Cells(i, 25))
ActiveChart.FullSeriesCollection(i).Values = Range(.Cells(i, 15), .Cells(i, 25))
        Next i
End With
End Sub
Top
#4
Hallo

ich schicke den Code korrigiert zurück, konnte aber nicht testen ob er so funktioniert?? Man achte auf den Punkt vor .Range in der With Klammer. Der hat überall gefehlt!  Schaltet man dann ins Blatt Diagramm um findet er keine Daten. Mir fiel auf das die Daten ab Zeile 9 geladen werden. Sind bereits 8 Linien im Diagramm vorhanden? Einfach mal testen was jetzt passiert ...

mfg  Gast 123


Code:
Sub Test2()
Dim LetzteZeile As Long, d As Integer
With Sheets("Meilensteintrendanalyse")
   LetzteZeile = .Cells(Rows.Count, 3).End(xlUp).Row

   ActiveSheet.ChartObjects("Diagramm 4").Activate
   For i = 9 To LetzteZeile
     ActiveChart.SeriesCollection.NewSeries
     ActiveChart.FullSeriesCollection(i).Name = .Cells(i, 3).Value
     ActiveChart.FullSeriesCollection(i).XValues = .Range(.Cells(i, 15), .Cells(i, 25))
     ActiveChart.FullSeriesCollection(i).Values = .Range(.Cells(i, 15), .Cells(i, 25))
   Next i
End With
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • stchwint
Top
#5
Hallo der Code funktioniert,

weißt du wie man über VBA alle Datensätze löscht?
Top
#6
Hallo

das ist ein Code aus dem Herber Forum, im Internet gefunden. Ich habe ihn nicht getestet. Probier bitte mal ob es damit klappt.

mfg gast 123

Code:
Sub NurErsterGraph()
   Dim cht As Chart, iSc As Integer
   
   Set cht = ActiveSheet.ChartObjects(1).Chart
   For iSc = cht.SeriesCollection.Count To 2 Step -1
       cht.SeriesCollection(iSc).Delete
   Next
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • stchwint
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste