Hallo,
ich hoffe ihr könnt mir weiter helfen. Ich habe folgendes Makro erstellt (funktionsfähig).
Ich habe alle Datenreihen einzeln erstellt da später vereinzelte Datenreihen nach Wunsch ausgeblendet werden sollen.
Mit dem unten geschriebenen Makro wird das Diagramm leider nur über einen festen Bereich erstellt. In dem Fall von Zeile 2- Zeile 36. Die Anzahl der Zeilen kann aber von Fall zu Fall variieren und ich würde deshalb gerne eine Variable "i" einsetzen.
Den Zähler dafür habe ich bereits. Dieser zählt alle beschriebenen Zeilen.
Sub DiagrammNeuesBlattErstellen()
Dim i As Integer
For i = 2 To 30
If Sheets("Kanal1").Cells(i, 1).Value = "" Then
i = i - 1
Exit For
End If
Next i
ThisWorkbook.Charts.Add Before:=Worksheets("Kanal2")
With ActiveChart
.ChartType = xlLineMarkers
.Name = "Diagramm1"
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = "='Kanal1'!$B$1"
.SeriesCollection(1).Values = "='Kanal1'!$B$2:$B$36"
.SeriesCollection(1).XValues = "='Kanal1'!$A$2:$A$36"
.SeriesCollection.NewSeries
.SeriesCollection(2).Name = "='Kanal1'!$C$1"
.SeriesCollection(2).Values = "='Kanal1'!$C$2:$C$36"
.SeriesCollection(2).XValues = "='Kanal1'!$A$2:$A$36"
.SeriesCollection.NewSeries
.SeriesCollection(3).Name = "='Kanal1'!$D$1"
.SeriesCollection(3).Values = "='Kanal1'!$D$2:$D$36"
.SeriesCollection(3).XValues = "='Kanal1'!$A$2:$A$36"
.SeriesCollection.NewSeries
.SeriesCollection(4).Name = "='Kanal1'!$F$1"
.SeriesCollection(4).Values = "='Kanal1'!$F$2:$F$36"
.SeriesCollection(4).XValues = "='Kanal1'!$A$2:$A$36"
.SeriesCollection.NewSeries
.SeriesCollection(5).Name = "='Kanal1'!$G$1"
.SeriesCollection(5).Values = "='Kanal1'!$G$2:$G$36"
.SeriesCollection(5).XValues = "='Kanal1'!$A$2:$A$36"
.SeriesCollection(2).AxisGroup = 2
.SeriesCollection(5).AxisGroup = 2
.DisplayBlanksAs = xlInterpolated
.ClearToMatchStyle
.ChartStyle = 42
.Legend.Position = xlTop
End With
End Sub
Am liebsten würde ich die Variable "i" einfach anstatt der letzten Zeile (G36) in den unten vorgegeben Bereich schreiben.
Das ganze würde dann so aussehen.
Sub DiagrammNeuesBlattErstellen()
Dim i As Integer
For i = 2 To 30
If Sheets("Kanal1").Cells(i, 1).Value = "" Then
i = i - 1
Exit For
End If
Next i
ThisWorkbook.Charts.Add Before:=Worksheets("Kanal2")
With ActiveChart
.ChartType = xlLineMarkers
.Name = "Diagramm1"
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = "='Kanal1'!$B$1"
.SeriesCollection(1).Values = "='Kanal1'!$B$2:$B$"i""
.SeriesCollection(1).XValues = "='Kanal1'!$A$2:$A$"i""
.SeriesCollection.NewSeries
.SeriesCollection(2).Name = "='Kanal1'!$C$1"
.SeriesCollection(2).Values = "='Kanal1'!$C$2:$C$"i""
.SeriesCollection(2).XValues = "='Kanal1'!$A$2:$A$"i""
.SeriesCollection.NewSeries
.SeriesCollection(3).Name = "='Kanal1'!$D$1"
.SeriesCollection(3).Values = "='Kanal1'!$D$2:$D$"i""
.SeriesCollection(3).XValues = "='Kanal1'!$A$2:$A$"i""
.SeriesCollection.NewSeries
.SeriesCollection(4).Name = "='Kanal1'!$F$1"
.SeriesCollection(4).Values = "='Kanal1'!$F$2:$F$"i""
.SeriesCollection(4).XValues = "='Kanal1'!$A$2:$A$"i""
.SeriesCollection.NewSeries
.SeriesCollection(5).Name = "='Kanal1'!$G$1"
.SeriesCollection(5).Values = "='Kanal1'!$G$2:$G$"i""
.SeriesCollection(5).XValues = "='Kanal1'!$A$2:$A$"i""
.SeriesCollection(2).AxisGroup = 2
.SeriesCollection(5).AxisGroup = 2
.DisplayBlanksAs = xlInterpolated
.ClearToMatchStyle
.ChartStyle = 42
.Legend.Position = xlTop
End With
End Sub
Leider ist die Sache nicht so einfach. Ich bin im Umgang mit Visual Basic blutiger Anfänger und würde mich über einige Denkanstöße freuen.
Danke im voraus
Gruß André
|