Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Y-Achsenskalierung mit Zellbezug

Y-Achsenskalierung mit Zellbezug
25.04.2014 14:56:01
Thomas
Tag zusammen!
Folgende Frage: Meine Y-Achsen-Skalierung (Minimal, Maximalwert und Hauptintervall) wird durch einen Zellbezug über Vba in meinem Programm festgelegt. Wenn sich jetzt Werte ändern, dann werden auch die Balken in meinem Diagramm größer oder kleiner. Dementsprechend ändert sich die Zelle, in der ich meine benutzerdefinierten Minimal- und Maximalwerte für das Diagramm berechne. Allerdings ändert sich die Skalierung im Diagramm selbst nicht. Ich muss das entweder per Hand machen oder das Makro nochmals durchlaufen lassen. Gibt es einen Befehl, mit dem sich die Skalierung und damit der Diagrammbereich automatisch mit anpasst?

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Y-Achsenskalierung mit Zellbezug
26.04.2014 09:28:35
Beverly
Hi Thomas,
du schreibst, dass Min/Max per VBA festgelegt werden - weise diese Werte im selben Augenblick der Y-Achse zu.


AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 13:56:04
Thomas
Danke für deine Antwort.
Wie genau meinst du zueweisen?
In meinem akutellen Code mache ich das so:
ActiveChart.Axes(xlValue).MinimumScale = Sheets("Daten").Cells(2, 14)
Wenn sich jetzt der Wert aber ändert, ändert sich das nicht automatisch im Diagramm. Gibts da auch die Möglichkeit den Befehl anders zu schreiben?
Für die Datenbeschriftung benutze ich z.B. folgende Funktion
ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten!B" & i + 1
Hier wird direkt bei einer Änderung der Daten dies auch im Diagramm aktualisiert, genau das bräuchte ich jetzt eben auch für die Achsenskalierung

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:07:47
Beverly
Damit kann ich leider nichts anfangen, denn ich sehe nicht, wodurch du deinen Code startest. Ich kann also nur sagen: baue deine Zeile für MinimumScale und MaximumScale an dieser Stelle ein, wo du dem Beschriftungslabel die Formel zuweist.


Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:39:38
Thomas
Vielleicht stehe ich auch einfach auf dem Schlauch, aber ich glaube das habe ich eigentlich gemacht. Vielleicht kannst du ja mit dem Code mehr anfangen, mit dem ich das Diagramm erstelle:

ActiveSheet.Shapes.AddChart.Select 'Diagramm hinzufügen
ActiveChart.ChartType = xlColumnStacked 'Diagrammtyp=Säulendiagramm
'Ermittlung der Anzahl an automatisch eingetragenen Datenreihen
intchartrow = ActiveChart.SeriesCollection.Count
' Löschen der Datenreihen beginnend mit der größten
For intcounter = intchartrow To 1 Step -1
ActiveChart.SeriesCollection(intcounter).Delete
Next intcounter
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Diagramm"  'Diagramm in neues Sheet,  _
mit Namen "Diagramm"
ActiveSheet.Move After:=Worksheets(Worksheets.Count) 'Neues Sheet ans Ende anfügen
With ActiveChart
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = Range(Sheets("Daten für Diagramm").Cells(2, 5), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 5)) 'Daten Hilfe in Säulendiagramm als Datenreihe 1 eintragen
.SeriesCollection.NewSeries
.SeriesCollection(2).Values = Range(Sheets("Daten für Diagramm").Cells(2, 7), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 7)) 'Daten Säulekorrektur in Säulendiagramm als Datenreihe 2 eintragen
.SeriesCollection(2).Format.Fill.Visible = msoFalse 'Säulen ohne Füllung, damit unsichtbar
.SeriesCollection.NewSeries
.SeriesCollection(3).Values = Range(Sheets("Daten für Diagramm").Cells(2, 4), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 4)) 'Daten Masnahmekorrektur in Säulendiagramm als Datenreihe 3 eintragen
.SeriesCollection.NewSeries
.SeriesCollection(4).Values = Range(Sheets("Daten für Diagramm").Cells(2, 8), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 8)) 'Daten Masnahmekorrektur in Säulendiagramm als Datenreihe 3 eintragen
.SeriesCollection(1).XValues = Range(Sheets("Daten für Diagramm").Cells(2, 1), Sheets(" _
Daten für Diagramm").Cells(Anzahlgesamt + 1, 1)) 'Beschriftung der x-Achse
.Legend.Delete 'Legendenbeschriftung löschen
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Energiekaskade"   'Diagrammtitel = Energiekaskade
.SetElement (msoElementPrimaryValueAxisTitleRotated)
Selection.Caption = Diagrammeinheit 'Beschriftung y-Achse mit ausgewählter Einheit aus Userform  _
Einheit
.SeriesCollection(3).Select
.ChartGroups(1).GapWidth = 40 'Abstand der Balken wählen
.Axes(xlCategory).TickLabelPosition = xlLow 'x-Achsenbeschriftung unter das Diagramm setzen
For i = 1 To Anzahlgesamt Step 1    'Datenbeschriftung über Schleife,
.SeriesCollection(3).ApplyDataLabels
If Not Sheets("Daten für Diagramm").Cells(i + 1, 4) = 0 Then
If Not IsEmpty(Sheets("Daten für Diagramm").Cells(i + 1, 4)) Then
ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten für Diagramm' _
!B" & i + 1
End If
End If
.SeriesCollection(3).DataLabels.NumberFormat = "#.##0,0"
Next
.Axes(xlValue).MinimumScale = Sheets("Daten für Diagramm").Cells(2, 14) 'Minimalwert der y- _
Achse
.Axes(xlValue).MaximumScale = Sheets("Daten für Diagramm").Cells(2, 13) 'Maximalwert der y- _
Achse
.Axes(xlValue).MinorUnitIsAuto = True
.Axes(xlValue).MajorUnitIsAuto = True
.Axes(xlValue).Select
.Axes(xlValue).MajorUnit = Sheets("Daten für Diagramm").Cells(2, 12) 'Hauptintervall der Y- _
Achsenbeschriftung
Exit sub

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:53:53
Beverly
In deinem Code gibt es die Zeilen .Axes(xlValue).MinimimScale und .Axes(xlValue).MaximumScale bereits - ich sehe also, nicht wo das Problem ist.


AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 15:39:42
Thomas
Dann nochmal von Anfang an:
Ich habe ein Programm geschrieben, mit dem ich ein Balkendiagramm erzeugen will. Führe ich das Programm einmal aus, erscheint auch das Diagramm, passt soweit alles wunderbar. Jetzt habe ich Messwerte, die sich aber häufig ändern. Bei diesen Änderungen möchte ich aber nicht die ganze Zeit das Programm nochmals starten müssen, deswegen auch die automatische Änderung im Diagramm bei Änderung der Zelle. Klappt auch soweit für die Balken, deren Beschriftung etc. Das einzige was sich eben nicht automatisch mitändert ist die neuskalierte Achse, obwohl sich der Wert in der Zelle, in der mein neu Berechnetes Mininum/Maximum steht, schon ändert. Ergo scheint mit dem Befehl, den ich für Min/Max Skalierung verwende, das nicht zu funktionieren und deswegen auch meine Frage, ob es hierfür eine Alternative gäbe?!

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 15:58:46
Beverly
Doch, der Befehl ist schon korrekt, nur wird er durch deinen Code eben ausschließlich und einmalig beim Erstellen des Diagramms ausgeführt. Die Achsenkalierung lässt sich jedoch nicht wie das Beschriftungslabel eines Datenpunktes mit einer Zelle verknüpfen (wie das deine Codezeile ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten für Diagramm'!B" & i + 1) macht.
Die Achsenskalierung muss JEDES Mal wieder neu zugewiesen werden (das macht die Codezeile für .MinimumScale und .MaximuScale), sobald sich die Daten im Tabellenblatt ändern. Folglich musst du ein Ereignis im Tabellenblatt benutzen, um die Achsenskalierung bei JEDER Änderung anzupassen - dazu benutzt man das Worksheet_Change-Ereignis.
Ich kann das leider nur so allgemein schreiben, da ich deinen Tabellenaufbau bzw. deine Mappe nicht genau kenne.


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Y-Achsenskalierung mit Zellbezug in Excel


Schritt-für-Schritt-Anleitung

  1. Diagramm erstellen: Füge ein Diagramm in Excel ein, indem Du die entsprechende Datenreihe auswählst und auf "Diagramm einfügen" klickst.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code einfügen: Füge den folgenden Code in das passende Modul ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Me.Range("Daten!A1:Daten!A10")) Is Nothing Then
            ActiveChart.Axes(xlValue).MinimumScale = Sheets("Daten").Cells(2, 14)
            ActiveChart.Axes(xlValue).MaximumScale = Sheets("Daten").Cells(2, 13)
        End If
    End Sub
  4. Ereignis aktivieren: Dieser Code sorgt dafür, dass die Y-Achsen-Skalierung automatisch angepasst wird, wenn Werte im angegebenen Bereich geändert werden.

  5. Testen: Ändere einen Wert in dem definierten Bereich, um sicherzustellen, dass die Skalierung des Diagramms sich entsprechend anpasst.


Häufige Fehler und Lösungen

  • Skalierung ändert sich nicht: Wenn die Y-Achsen-Skalierung nicht aktualisiert wird, stelle sicher, dass das Worksheet_Change-Ereignis korrekt eingerichtet ist und auf die richtigen Zellen verweist.

  • Fehlermeldungen im VBA: Überprüfe, ob alle Objekte und Variablen korrekt deklariert sind. Achte darauf, dass die Namen der Blätter und Zellen exakt stimmen.


Alternative Methoden

  • Direkte Zellverknüpfung: Anstatt die Skalierung per VBA zu steuern, kannst Du die Excel-Achsenoptionen direkt mit Zellbezügen verknüpfen. Gehe zu den Achsenoptionen und setze die Minimal- und Maximalwerte auf die entsprechenden Zellen, um die Achsenskalierung zu automatisieren.

  • Verwendung von Formeln: Du kannst auch Excel-Formeln verwenden, um die Grenzen der Achse dynamisch zu berechnen, beispielsweise mit der MIN und MAX-Funktion.


Praktische Beispiele

  1. Einfaches Balkendiagramm: Erstelle ein einfaches Balkendiagramm mit dynamischen Werten aus einer Tabelle. Verwende die oben genannten Schritte, um die Y-Achse automatisch anzupassen.

  2. Diagramm mit 2 Y-Achsen: Wenn Du ein Excel-Diagramm mit 2 Y-Achsen erstellst, kannst Du die achsenskalierung für jede Achse separat anpassen. Stelle sicher, dass Du die entsprechenden Zellbezüge für beide Y-Achsen verwendest.


Tipps für Profis

  • Verwende Namensbereiche: Definiere Namensbereiche für die Zellbezüge, um die Wartung des Codes zu erleichtern und die Lesbarkeit zu erhöhen.

  • Debugging im VBA: Nutze die Debugging-Funktionen im VBA-Editor, um Deinen Code Schritt für Schritt zu überprüfen und mögliche Fehlerquellen zu identifizieren.


FAQ: Häufige Fragen

1. Was kann ich tun, wenn die Y-Achse nicht automatisch skaliert? Stelle sicher, dass Du das Worksheet_Change-Ereignis korrekt implementiert hast und dass die referenzierten Zellen korrekt sind.

2. Wie kann ich die Achsenskalierung von mehreren Diagrammen gleichzeitig anpassen? Du kannst eine Schleife im VBA verwenden, um mehrere Diagramme zu durchlaufen und die Achsenskalierung entsprechend anzupassen.

3. Kann ich die Achsenoptionen auch ohne VBA anpassen? Ja, Du kannst die Achsenoptionen direkt in den Diagrammeinstellungen anpassen, indem Du die Minimal- und Maximalwerte auf Zellbezüge setzt.

4. Wie funktioniert die automatische Aktualisierung der Achsen? Die automatische Aktualisierung erfolgt über das Worksheet_Change-Ereignis, welches bei jeder Änderung in den definierten Zellen ausgelöst wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige