Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Diagramm mit verschiedenen Bedingungen

VBA Diagramm mit verschiedenen Bedingungen
09.01.2019 09:13:32
Christian
Hallo zusammen!
Ich habe ein Tabellenblatt mit mehren Informationen, (Spalte B bis G); nun möchte ich mit gewissen Werten Diagramme zeichnen.
Wenn in Spalte C der Wert "Ausbilder" steht, sollen aus dieser Zeile die Werte:
G als x-Werte genommen werden
G als y-Werte
B als Bezeichnung des Datensatzes
hergenommen werden.
Die erste Zeile mit Werten ist die dritte.
Wenn ich mein Diagramm nur mit Werten aus der dritten Zeile erstelle, sieht das Makro so aus:
Sub diagrammerstellen()
Dim lngZeile As Long
Dim wksTab As Worksheet
Set wksTab = Worksheets("'2018') Daten auswählen")
With ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Chart
.SetSourceData Source:=Range("'2018'!$B$3:$G$5")
If .SeriesCollection.Count = 1 Then .SeriesCollection(1).Delete
For lngZeile = 3 To 7
If Cells(lngZeile, 3) = Ausbilder Then
With .SeriesCollection.NewSeries
.Name = "='1) Daten auswählen'!$B$" & lngZeile
.XValues = wksTab.Range(wksTab.Cells(lngZeile, 7), wksTab.Cells(lngZeile, 7) _
)
.Values = wksTab.Range(wksTab.Cells(lngZeile, 7), wksTab.Cells(lngZeile, 7)) _
End With
End If
Next lngZeile
.HasLegend = True
.SetElement (msoElementLegendRight)
With .Legend.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
.Axes(xlValue).HasTitle = True
.Axes(xlCategory).HasTitle = True
End With
End Sub
https://www.herber.de/bbs/user/126587.xlsm
Leider Funktioniert dies so nicht, er sagt das in "Set wksTab = Worksheets("'2018') Daten auswählen")" etwas nicht stimmt.
Die Tabelle soll noch mit deutlich mehr Daten gefüttert werden, so das das Diagramm dann automatisch mit den weitern Daten ergänzt werden soll.
Kann mir jemand sagen wo der Fehler ist?
Und kann ich dort auch sagen, dass er die Diagramm Überschrift z.b. aus der Zelle G1 nehmen soll?
Beste Grüße
Christian

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Diagramm mit verschiedenen Bedingungen
09.01.2019 09:18:08
PeterK
Hallo
Set wksTab = Worksheets("2018")
AW: VBA Diagramm mit verschiedenen Bedingungen
09.01.2019 09:53:11
Christian
Danke für die schnelle Antwort. Das hat mich schonmal weiter gebracht.
Ich hab das Diagramm nun mal auf ein Balkendiagramm geändert.
Die Y-Achse wird richtig angezeigt. Auf der X-Achse zeigt er mit aber nicht nur den Namen aus der B Spalte an, sondern auch aus C und D.
Wie kann ich das ändern?
Kann ich die Achsentitel und Diagrammtitel auch direkt in VBA beschreiben?
Sub diagrammerstellen()
Dim lngZeile As Long
Dim wksTab As Worksheet
Set wksTab = Worksheets("2018")
With ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Chart
.SetSourceData Source:=Range("'2018'!$B$2:$T$40")
If .SeriesCollection.Count = 1 Then .SeriesCollection(1).Delete
For lngZeile = 2 To 20
If Cells(lngZeile, 3) = Ausbilder Then
With .SeriesCollection.NewSeries
.Name = "='1) Daten auswählen'!$B$" & lngZeile
.XValues = wksTab.Range(wksTab.Cells(lngZeile, 2), wksTab.Cells(lngZeile, 2) _
)
.Values = wksTab.Range(wksTab.Cells(lngZeile, 7), wksTab.Cells(lngZeile, 7)) _
End With
End If
Next lngZeile
.HasLegend = True
.SetElement (msoElementLegendRight)
With .Legend.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
.Axes(xlValue).HasTitle = True
.Axes(xlCategory).HasTitle = True
End With
End Sub

Anzeige
Meinst du vielleicht...
09.01.2019 10:32:33
Beverly
Hi Christian,
...so etwas:
Sub diagrammerstellen()
Dim lngZeile As Long
Dim wksTab As Worksheet
Set wksTab = Worksheets("2018")
With ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Chart
.SetSourceData Source:=Range("'2018'!$B$2")
If .SeriesCollection.Count = 1 Then .SeriesCollection(1).Delete
For lngZeile = 2 To 20
If Cells(lngZeile, 3) = "Ausbilder" Then
With .SeriesCollection.NewSeries
.Name = "='2018'!$B$" & lngZeile
.Values = wksTab.Cells(lngZeile, 7)
End With
End If
Next lngZeile
.SeriesCollection(1).XValues = wksTab.Range("G1")
.HasLegend = True
.SetElement (msoElementLegendRight)
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Caption = "Verwaltung"
With .Legend.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Caption = "Gehalt in €"
End With
With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Caption = "Gesamt"
End With
End With
End Sub


Anzeige
AW: Meinst du vielleicht...
09.01.2019 11:19:00
Christian
Ohja das ist schon super! Dankeschön!
Ein paar Kleinigkeiten hätte ich noch:
Ich habe den X-Achsentitel für mich angepasst. Möchte aber nun das die Namen nicht rechts erscheinen, sondern direkt unter dem eigenen Balken stehen. Wie kann ich das machen?
Sub diagrammerstellen()
Dim lngZeile As Long
Dim wksTab As Worksheet
Set wksTab = Worksheets("2018")
With ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Chart
.SetSourceData Source:=Range("'2018'!$B$2")
If .SeriesCollection.Count = 1 Then .SeriesCollection(1).Delete
For lngZeile = 2 To 20
If Cells(lngZeile, 3) = "Ausbilder" Then
With .SeriesCollection.NewSeries
.Name = "='2018'!$B$" & lngZeile
.Values = wksTab.Cells(lngZeile, 7)
End With
End If
Next lngZeile
.SeriesCollection(1).XValues = wksTab.Range("G1")
.HasLegend = True
.SetElement (msoElementLegendRight)
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Caption = "Verwaltung"
With .Legend.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Caption = "Gehalt in €"
End With
With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Caption = wksTab.Range("G1")
End With
End With
End Sub

Anzeige
Ergänze vor dem letzten...
09.01.2019 11:46:09
Beverly
...End With diese Zeile:
        .PlotBy = xlColumns


AW: Ergänze vor dem letzten...
09.01.2019 15:17:56
Christian
Läuft! Super, vielen Dank!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige