14.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
1)ich hab in Excel 2007 ein Set von Diagramme erstellt. Die Variable sprich Spalte der X Achse ist immer identisch, die Variable für die y Achse ist immer unterschiedlich ( ca. 40 Diagramme)
2) Ich hab das set an Diagrammen kopiert und nun will ich nur die X achse variable (Spalte) ändern und entsprechden die Beschriftung der Achse angeben, . Damit ich nicht alles zu fuß ändern muss hab ich mir gedacht diese Änderung mit dem makrorecoder aufzuzeichnen und für die restlichen Diagramme das makro zu zuweisen. Funktioniert jedoch ned.
Das is der VBA Code:

ActiveSheet.ChartObjects("Diagramm 97").Activate
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Formula = _
"=DATENREIHE(""Height DBH"";Tabelle1!$BS$370:$BS$671;Tabelle1! $BJ$370:$BJ$671;1)"

Die einzige Änderung die ich vorgenommen habe und aufgezeichnet habe war die änderung von $DC$370:$DC§671 auf $BS$370:$BS$671(wie es im makro steht)
Es wäre nun klasse, wenn ich die änderung bei allen restlichen Diagramme per knopfdruck (makro) durchführen könnte und die Achsenbeschriftung (ist im Makrocode nicht enthalten). Wäre genial wenn mir wer weiter helfen könnte.
Schöne Grüße

25 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andi,

nein, das geht nicht, sondern man müsste in einer Schleife über alle Diagramme laufen. Du schreibst jedoch, dass du in verschiedenen Diagrammen eine unterschiedliche Anzahl an Datenreihen verwendest - wie ist das dann mit dem X-Wertebereich? Wenn es z.b. nur 3 Datenreihen sind, sind es dann die Bereiche DU370:DU671, DU672:DU800 und DU801:DU1000 und wenn es 4 Datenreiehn sind dann DU370:DU671, DU672:DU800, DU801:DU1000 und DU1001:DU1200? Oder verhält sich dann alles anders?

Bis später,
Karin
0 Punkte
Beantwortet von
Hi Karin,

ein Set an Diagramme hat immer die gleiche Anzahl von Datenreihen. z.B. DU370:DU671 (Reihe 1), DU672:DU800 (Reihe 2)und DU801:DU100 (Reihe 3). Könnte man einen Loop einbauen der bei allen markierten Diagrammen den X-Wertebereich anpasst?
bis denne
Andi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andi,

mit dem folgenden Code werden alle Diagramme angepasst in Abhängigkeit von der Anzahl der Datenreihen:
Sub DiasAnpassen()
Dim chDiagramm As ChartObject
For Each chDiagramm In ActiveSheet.ChartObjects
With chDiagramm.Chart
Select Case .SeriesCollection.Count
Case 3
.SeriesCollection(1).XValues = Range("DU370:DU671")
.SeriesCollection(2).XValues = Range("DU672:DU800")
.SeriesCollection(3).XValues = Range("DU801:DU1000")
Case 4
.SeriesCollection(1).XValues = Range("DU370:DU671")
.SeriesCollection(2).XValues = Range("DU672:DU800")
.SeriesCollection(3).XValues = Range("DU801:DU1000")
.SeriesCollection(4).XValues = Range("DU1001:DU1200")
Case 5
.SeriesCollection(1).XValues = Range("DU370:DU671")
.SeriesCollection(2).XValues = Range("DU672:DU800")
.SeriesCollection(3).XValues = Range("DU801:DU1000")
.SeriesCollection(4).XValues = Range("DU1001:DU1200")
.SeriesCollection(5).XValues = Range("DU1201:DU1300")
End Select
End With
Next chDiagramm
End Sub

Vielleicht hilft dir das weiter. Wenn es eine Mindestanzahl an Datenreihen gibt, kannst du diesen Teil aus allen Case-Anweisungen herausnehmen und vor die Zeile Select Case .SeriesCollection.Count einfügen.

Bis später,
Karin
0 Punkte
Beantwortet von
Hi Karin,

es funktioniert, nun bin ich wunschlos glücklich ;-) Vielen Vielen Dank !!!!

Schöne Grüße
Andi
0 Punkte
Beantwortet von
Hi Karin,

eine Frage hätte ich noch. Wie kann ich per makro den titel der X-Achse ändern. Am besten bei mehreren Diagrammen gleichzeitig evtl. auch per Schleife?

Gruß Andi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andy,

vom Prinzip her kann man das auf diese Weise machen:
Sub DiagrammAchsentitel()
With ActiveSheet.ChartObjects("Diagramm 1").Chart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X-Achse"
End With
End Sub

Anstelle des festen Textes "X-Achse" kannst du auch einen Zellinhalt verwenden, z.B. Range("B1").

Andere Möglichkeit - du markierst das Diagramm und verwendest diesen Code:
Sub DiaAchsentitel()
With ActiveSheet.ChartObjects(Application.Substitute(Selection.Parent.Name, _
ActiveSheet.Name & " ", "")).Chart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("B1")
End With
End Sub

Wenn du die Titel für mehrere Diagramm ändern willst, dann kannst du den Code entweder für jedes Diagramm entsprechend anpassen, oder du schreibst die Titel in fortlaufend in Zellen (z.B. Spalte B), sodass sie daraus entnommen werden können:
Sub DiagrammAchsentitel()
Dim inTitel As Integer
Dim chDiagramm As ChartObject
inTitel = 1
For Each chDiagramm In ActiveSheet.ChartObjects
With chDiagramm.Chart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Cells(inTitel, 2)
End With
inTitel = inTitel + 1
Next chDiagramm
End Sub

Dabei gibt es jedoch folgendes Problem, welches sich auch nicht umgehen lässt: Excel nummeriert intern die Diagramme in der Reihenfolge wie sie erstellt werden. Wenn nun aus mehreren Diagrammen zwischendurch eins gelöscht (z.B. das 3.) und stattdessen ein neues eingefügt wird, hat das zuletzt eingefügte die höchste Nummer, auch wenn es sich nun an 3. Position im Tabellenblatt befindet. Somit würde das neu eingefügte den Achsentitel aus der letzten Zeile bekommen, obwohl es eigentlich den Titel aus der 3. Zeile bekommen müsste. Wenn du garantieren kannst, dass du die Diagrammreihenfolge nicht verändert hast (keins gelöscht, keins zwischendurch hinzugefügt, keins in der Positionsreihenfolge verschoben), kannst du den Code mit der Schleife verwenden.

Bis später,
Karin
0 Punkte
Beantwortet von
Hi Karin,

ich bins schon wieder. Es funktioniert alles tadellos, jedoch ändert sich der Datenbereich (Xwerte) in allen Diagrammen, des Tabellenblattes bzw. der Achsentitel. Ich will jedoch, dass sich der Datenbereich und Achsentitel nur bei den markierten Diagrammen ändert. Folgende VBA codes hab ich verwendet:

Sub DiasAnpassen()
Dim chDiagramm As ChartObject
For Each chDiagramm In ActiveSheet.ChartObjects
With chDiagramm.Chart
Select Case .SeriesCollection.Count
Case 5
.SeriesCollection(1).XValues = Range("DU370:DU671")
.SeriesCollection(2).XValues = Range("DU672:DU800")
.SeriesCollection(3).XValues = Range("DU801:DU1000")
.SeriesCollection(4).XValues = Rang("DU1001:DU1200")
.SeriesCollection(5).XValues = Rang("DU1201:DU1300")
End Select
End With
Next chDiagramm
End Sub
--------------------------------------------------------------------------------------------
Sub DiagrammAchsentitel()
Dim inTitel As Integer
Dim chDiagramm As ChartObject
inTitel = 1
For Each chDiagramm In ActiveSheet.ChartObjects
With chDiagramm.Chart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Text"
End With
inTitel = inTitel + 1
Next chDiagramm
End Sub

Könntest du sie mir bitte soweit abändern, dass nur den markierten Diagrammen das makro zugewiesen wird.
Schöne GrüßeAndi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andy,

so richtig verstehe ich nicht was du machen willst. Hier mal das Ergebnis wie ich es interpretieren würde:
Sub SelektierteDiagramme()
Dim objDiagramm As Object
For Each objDiagramm In Selection
With objDiagramm.Chart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Text"
End With
Next objDiagramm
End Sub

Sub SelektierteDiagramme2()
Dim objDiagramm As Object
For Each objDiagramm In Selection
With objDiagramm.Chart
.SeriesCollection(1).XValues = Range("DU370:DU671")
.SeriesCollection(2).XValues = Range("DU672:DU800")
.SeriesCollection(3).XValues = Range("DU801:DU1000")
.SeriesCollection(4).XValues = Range("DU1001:DU1200")
.SeriesCollection(5).XValues = Range("DU1201:DU1300")
End With
Next objDiagramm
End Sub


Bis später,
Karin
0 Punkte
Beantwortet von
Hi Karin,
vielen Dank für deine Schnelle Antworte.
Bei deinen letzten beiden VBA Codes ist das Ergebnis leider unverändert. Der Datenbereich bzw. X-Achsentitel ändert sich bei allen Diagrammen im Sheet, obwohl ich nur einen Teil der Diagramme markiert habe. Ich hätte es gerne, dass sich nur die Diagramme ändern, die ich auch markiert habe. Ist das möglich?
Vielen Dank und schöne Grüße
Andi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andi,

ich habe den Code getestet bevor ich ihn gepostet habe und bei mir funktioniert er fehlerlos. Du hast die betreffenden Diagramme vorher bei gedrückter Shift-Taste markiert?

Bis später,
Karin
...