Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: André H. am November 29, 2014, 14:56:48 Nachmittag

Titel: Office 2007: VBA variabler Diagrammbereich???
Beitrag von: André H. am November 29, 2014, 14:56:48 Nachmittag
 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é
Titel: Antw:Office 2007: VBA variabler Diagrammbereich???
Beitrag von: maninweb am November 30, 2014, 09:44:44 Vormittag
Hallo André,

um Texte miteinander zu verknüpfen, kannst Du den Operator & verwenden, bei den anderen Zeilen dann genauso:

.SeriesCollection(1).Values = "='Kanal1'!$B$2:$B$" & CStr(i)

CStr() wandelt Dir das i (als Integer) deklariert in einen Text um. Theoretisch gesehen kannst Du auch CStr()
weglassen, dann würde VBA das automatisch machen.

Gruß
Titel: Antw:Office 2007: VBA variabler Diagrammbereich???
Beitrag von: André H. am November 30, 2014, 15:02:22 Nachmittag
Danke für deine Hilfe, so funktioniert es ;-).
ibt es zusätzlich noch einen Befehl über den ich einzelne Datenreihen ausblenden bzw. einblenden kann??