Diagrammquelle per VBA zuweisen

Hallo Leute,

ich möchte einem Diagramm per VBA-Code die Datenquelle zuweisen. Hab ich bisher mit

Charts("Chartname").SetSourceData Source:=.Range(cells(1,1),cells(3,4))

gemacht, ging auch gut. Jetzt habe ich aber als Datenquelle nicht mehr einen Range (z. B. A1 bis B10), sondern zwei Ranges (z. B. A1 bis B10 + D1 bis D10).

Kann mir jemand sagen, wie ich das gebacken kriege?

Gruß und Danke!
(Woly)

Hallo, Woly!

ich möchte einem Diagramm per VBA-Code die Datenquelle
zuweisen. Hab ich bisher mit

Charts(„Chartname“).SetSourceData
Source:=.Range(cells(1,1),cells(3,4))

gemacht, ging auch
gut. Jetzt habe ich aber als Datenquelle nicht mehr einen
Range (z. B. A1 bis B10), sondern zwei Ranges (z. B. A1 bis
B10 + D1 bis D10).
Kann mir jemand sagen, wie ich das gebacken kriege?

Ich mache das immer über die .Values und .XValues-Eigenschaften der Elemente der SeriesCollections-Auflistung, also z. B.

X.SeriesCollection(1).Values = "A1:A10,A15:A25"

Das Komma da drin könnte auch ein Semikolon sein, weiß ich gerade nicht, und der VBA-Compiler (wobei: der findet den Fehler auch nicht, wenn er denn einer ist) ist noch nicht im Forum integriert.

So, wie es bei Dir aussieht, kommt aber wohl eine neue Datenreihe hinzu? Dann kannst Du auch mit der Add-Methode von SeriesCollections eine solche hinzufügen.

Geht aber vielleicht auch einfacher: Bastel Dir das Diagramm manuell und lies die Eigenschaften aus, indem Du z. B. im Direktfenster was mit ActiveChart machst und die betreffenden Eigenschaften ausgeben lässt. Dann die entsprechende Eigenschaft einfach per VBA zuweisen.

Gruß, Manfred

Hallo Woly,

am besten geht das wohl durch Festlegung eines Namens für die Diagramm-Daten.
In meinem Beispiel-Makro kann die Zahl der Zeilen, die im Diagramm angezeigt werden sollen im Makro festgelegt werden. Der Name wird dann neu definiert.

Sub DatenzuweisenDiagramm()
' Festlegung des Namens für Diagramm-Daten
 LetzteZeile = 10
 Bereich = "=Tabelle1!R1C1:R" & LetzteZeile & "C2,Tabelle1!R1C4:R" & LetzteZeile & "C4"
 ActiveWorkbook.Names.Add Name:="DatenDiagramm", RefersToR1C1:=Bereich
' Diagramm ändern
 With ActiveWorkbook.Sheets("Tabelle1")
 Charts("Diagramm1").SetSourceData Source:=.Range("Datendiagramm")
 End With
End Sub

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Manfred,

danke für Deinen Hinweis. Mir war’s zu aufwendig, für jede Datenreihe eine eigene Zuweisung zu machen, weil die Anzahl der Datenreihen in Zukunft auch immer größer wird.

Ich habe eine andere Lösung genommen (siehe weiter oben)

Gruß
(Woly)

Hallo Franz,

bei der Festlegung des Namens hab ich natürlich dieselbe Problematik. Ich habe mich aber jetzt für die Variante entschieden, den „Range-String“ (also z. B. A1:smiley:20;G1:G20) zusammenzubasteln. Das ist zwar nicht gerade elegant, aber es funktioniert!

Danke und Gruß
(Woly)

Hallo Woly,

der 1. Teil des von mir vorgeschlagenen Makros macht ja auch nichts anderes als den Bereich zu berechnen (zusammenzubasteln), der im Diagramm ausgewertet werden soll. Ich habe dann aus Vereinfachungsgründen dem Bereich auch noch einen Namen verpasst.

Kommen mehr Datenzeilen dazu, so kann mann die Zeilenzahl anpassen oder auch mit einer geeigneten Formel berechnen lassen.

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]