Microsoft Excel

Herbers Excel/VBA-Archiv

Gleiche Skalierung x- und y-Achse

Betrifft: Gleiche Skalierung x- und y-Achse von: Martin von Werder
Geschrieben am: 06.09.2004 15:48:48

Hallo,

folgendes Problem:

In einem bestehenden x-y-Diagramm (eingebettet) möchte ich quasi per Knopfdruck eine identische Skalierung von x- und y-Achse erreichen, und zwar dergestalt, dass unabhängig von der gewählten Größe des Diagramms die "Länge" einer Einheit auf x- und y-Achse jeweils gleich ist.

Mir ist klar, dass dies vermutlich nur mit VBA zu machen sein wird, dessen ich jedoch leider nicht mächtig bin...
Ich wäre daher für Lösungsansätze dankbar, die mir neben dem VBA-Code auch sagen würden, wie ich diesen ins Dokument reinfummeln muss damits läuft...

Vielen Dank schon mal im Voraus

Martin

  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Björn B.
Geschrieben am: 09.09.2004 22:12:06

Hallo Martin,

möglicherweise hilft dir dieses Makro:

Sub Chart_anpassen()

    xmin = ActiveChart.Axes(xlCategory).MinimumScale
    xmax = ActiveChart.Axes(xlCategory).MaximumScale
    ymin = ActiveChart.Axes(xlValue).MinimumScale
    ymax = ActiveChart.Axes(xlValue).MaximumScale
    
    If xmax - xmin > ymax - ymin Then
        ymax = ymax + (xmax - xmin) - (ymax - ymin)
    Else
        xmax = xmax + (ymax - ymin) - (xmax - xmin)
    End If
        

    With ActiveChart.Axes(xlCategory)
        .MinimumScale = xmin
        .MaximumScale = xmax
    End With

    With ActiveChart.Axes(xlValue)
        .MinimumScale = ymin
        .MaximumScale = ymax
    End With

End Sub



m das Makro in eine Datei einzubinden, Excel starten. Dann Alt + F11 drücken und den VBA-Editor starten. Dann im Menü "Einfügen" den Menüpunkt "Modul" wählen.
In das nun erscheinende leere Modul das obige Makro (von
Sub bis Sub) kopieren.

Das Fenster des VBA-Editors schließen.

Um das Makro anzuwenden nun auf ein x,y-Diagramm klicken und nach von Alt + F8 das Makro "Chart_anpassen" starten.

Gruß
Björn

P.S.: Willst Du das Makro behalten, so musst du die Datei speichern!



  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Martin
Geschrieben am: 10.09.2004 10:38:58

Hallo Björn,

danke für die Antwort, habe das Makro gerade getestet und stelle fest, dass der im Diagramm abgebildete Wertebereich verändert wird und nun für x- und y-Achse identisch ist (z.B. x-Achse von -5 bis +10, y-Achse von -2 bis +13). Abhängig von der Größe des Diagrammfensters ist die auf dem Bildschirm dargestellte Länge einer Einheit allerdings nach wie vor unterschiedlich.

Ich kenne mich mit den entsprechden Befehlen und Anweisungen in VBA leider nicht aus, mein eigener Ansatz wäre es allerdings zu versuchen irgendwie die Länge einer Einheit auf der x-Achse zu ermitteln (abhängig von der Größe des Diagrammfensters), um dann die y-Achse entsprechend zu skalieren (oder umgekehrt). Ich kann leider nicht nachvollziehen, ob oder wie Dein Makro dies tut oder nicht.

Gruss

Martin


  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Björn B.
Geschrieben am: 10.09.2004 21:10:34

Hallo Martin,

ich hatte schon gedacht, dass ich dir nicht helfen könnte, aber es scheint doch zu klappen. Versuche doch mal, ob dieses Makro macht, was du willst.


Sub Chart_anpassen()

    xplot = ActiveChart.Axes(xlCategory).Width
    yplot = ActiveChart.Axes(xlValue).Height
    
    xmin = ActiveChart.Axes(xlCategory).MinimumScale
    xmax = ActiveChart.Axes(xlCategory).MaximumScale
    ymin = ActiveChart.Axes(xlValue).MinimumScale
    ymax = ActiveChart.Axes(xlValue).MaximumScale
    
    If (xmax - xmin) / xplot > (ymax - ymin) / yplot Then
        yplot = (ymax - ymin) * xplot / (xmax - xmin)
    Else
        xplot = (xmax - xmin) * yplot / (ymax - ymin)
    End If
        
    ActiveChart.PlotArea.Width = xplot
    ActiveChart.PlotArea.Height = yplot

End Sub

Gruß
Björn


  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Martin
Geschrieben am: 13.09.2004 09:35:31

Hallo Björn,

nochmals Danke für die schnelle Antwort. Deine neue Version funktioniert schon besser als die vorige Variante. Allerdings tritt auch hier immer noch das Problem auf, dass Einheiten auf der x- und y-Achse unterschiedliche Längen haben.

Das Problem lösen würde m.E. ein Makro das folgendes tut:

- Ermittlung der aktuellen Größe des Diagrammfensters (Breite / Höhe)
- Anpassung der x-Achse an Fensterbreite (Diagrammfensterbreite wird komplett von x-Achse ausgefüllt, wobei min- und max-Wert erhalten bleiben)
- Skalierung der y-Achse dergestalt, dass die Länge einer Einheit identisch mit x-Achse ist (abhängig von der Form des Diagrammfensters verbleibt oben oder unten im Fenster "Luft", oder es kann nicht der komplette Wertebereich abgebildet werden)

Ich denke ich werde mich -ausgehend von Deinen guten Ideen- selber mal intensiv mit VBA beschäftigen und hoffentlich eine Lösung finden... Gibt es (abgesehen von diesem Forum hier) eine gute Anleitung dazu (Buch, Web, etc ) ??

So denn....

Gruss

Martin


  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Björn B.
Geschrieben am: 13.09.2004 10:33:48

Hallo Martin,

das letzte Quentchen Genauigkeit bekomme ich wohl nicht hin. Das Problem ist, dass ich die Höhe der y-Achse und die Breite der x-Achse zwar auslesen, aber nicht festlegen kann, da die Eigenschaft schreibgeschützt ist.

Eine andere Variante, die ich versucht hatte war über die innere Begrenzung der PlotArea (Zeichnungsfläche) ans Ziel zu kommen, die exakt den Achsenlängen entsprechen. Auch hier bin ich am Schreibschutz der Eigenschaften InsideHeight und InsideWidth gescheitert.

Zum Schluß habe ich mich dann darauf beschränkt, die Eigenschaften Width und Height der PlotArea festzulegen. Du hast leider ganz richtig erkannt, dass es dadurch zu Ungenauigkeiten kommt. Die PlotArea beinhaltet in diesem Fall nämlich auch die Achsenbeschriftung.

Eine Idee wäre noch, dass man iterativ das Problem löst, indem man die Width und Height Eigenschaften so lange manipuliert, bis die Eigenschaften InsideHeight und InsideWidth passen.

Ich komme aber in den nächsten beiden Tagen definitiv nicht dazu, da ich auf Dienstreise gehe. Du kannst mir ja mal mitteilen, ob ich's danach noch mal probieren soll.

Bezüglich Literatur kann ich nur auf die Recherche verweisen, wahrscheinlich findest du da etwas. Ich habe mir VBA ohne Buch durch "Learning by doing" und "Try and error" angeeignet.

Gruß
Björn


  


Betrifft: AW: Gleiche Skalierung x- und y-Achse von: Martin
Geschrieben am: 13.09.2004 14:49:13

Hallo Björn,

vielen Dank für Deine intensive Unterstützung zu diesem Thema !
Wenn Du möchtest kannst Du natürlich gerne in Richtung iteraktiver Lösung "weiterforschen". Über eine Info wäre ich dann sehr dankbar !

Dennoch denke ich wie beschrieben weiterzumachen um mich selbst in die VBA Thematik einzuarbeiten ...

Gruss

Martin


 

Beiträge aus den Excel-Beispielen zum Thema "Gleiche Skalierung x- und y-Achse"