Excel - absolute Achsenskalierung möglich?

Hallo, ich habe eine ganze Reihe von Messpunkten, die einen Profilschnitt definieren. Diese will ich nun mit Hilfe von Excel grafisch darstellen.

Dazu verwende ich ein xy-Diagramm - bis dahin läuft auch alles… nur ist die Skalenteilung der Achse für x- und y-Achse komplett verschieden. Somit entsteht nur ein verzerrtes Bild, was ich so leider nicht verwenden kann.

Nun also die Frage: kann ich Excel sagen, dass bei gleichem Hauptintervall (bspw. 500) auch die absolute Länge gleich sein soll(bspw. 1cm)?

Ob ich da einen festen Wert eintragen kann ist mir eigentlich egal - es soll einfach nur ein fester Zusammenhang zwischen den beiden Achsen bestehen!

Vielen Dank
Michael

Absolute Achsenskalierung möglich? Nachfrage:
Hallo Michael,

ich könnte dir eine Lösung mit VBA basteln, falls du dich damit ein bisschen auskennst. Dazu aber eine Frage:
Möchtest du es so, dass auf beiden Achsen ein gleich großer Wertebereich abgebildet wird (z.B. X von 10 - 20, und Y von 30 - 40). Dann würde der Plotbereich quadratisch.
Oder möchtest du wie üblich ein rechteckiges Diagramm (mehr breit als hoch). Dann wäre auf der X-Achse ein größerer Wertebereich als auf der Y-Achse.
In beiden Fällen wäre aber eine „Benutzereinheit“ in X und Y gleich lang.

Gruß, Andreas

Hallo Andreas,

mit VBA habe ich mich leider noch nie beschäftigt, bin aber lernfähig :wink:

Bezüglich deiner Frage: da die Profilschnitte teils deutlich breiter als hoch sind, würde ich ein rechteckiges Diagramm für passender halten.

Grüße,
Michael

Grüezi stimic

Hallo, ich habe eine ganze Reihe von Messpunkten, die einen
Profilschnitt definieren. Diese will ich nun mit Hilfe von
Excel grafisch darstellen.

Dazu verwende ich ein xy-Diagramm - bis dahin läuft auch
alles… nur ist die Skalenteilung der Achse für x- und
y-Achse komplett verschieden. Somit entsteht nur ein
verzerrtes Bild, was ich so leider nicht verwenden kann.

Nun also die Frage: kann ich Excel sagen, dass bei gleichem
Hauptintervall (bspw. 500) auch die absolute Länge gleich sein
soll(bspw. 1cm)?

Hier findest Du eine Anleitung wie Du die Achsen gleich skalieren kannst, inkl. VBA-Code:

http://peltiertech.com/Excel/Charts/SquareGrid.html

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Michael,

den Link zu einem VBA code hat dir Thomas ja weiter ober schon gepostet (dann brauche ich also nichts zu schreiben). Das sieht IMHO sehr gut aus.
Leider haber ich kein Excel2010, nur 2003, da ist ja vieles sehr anders. Deswegen kann ich dir leider hier keine Anleitung geben, wie du den Code in dein Modul bekommst (wie kommmt man bei 2010 an den VBA Editor usw.)
Evtl. kann einer der Experten mit 2010 dir hier weiter helfen.

Gruß, Andreas

1 Like

Hallo,

wo ist hier der Bedarf noch einer VBA-Lösung? Warum reicht es nicht die Achsenskalierung manuell unter Achsenoptionen, DK auf Achse, vorzunehmen und dann die Diagrammgröße anzupassen?

Anton

Grüezi Pompeto

wo ist hier der Bedarf noch einer VBA-Lösung? Warum reicht es
nicht die Achsenskalierung manuell unter Achsenoptionen, DK
auf Achse, vorzunehmen und dann die Diagrammgröße anzupassen?

…weil man das dann manuell und von Auge machen muss?

Der Code gleicht Breite und Höhe automatisch zueinander ab, sodass die Darstellung dann proportional ist.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Andreas

wie kommmt man bei 2010 an den VBA Editor usw.

Mit ALT+F11 wie immer oder über einen Rechtsklick auf einen Tabellenblattreiter und ‚Code anzeigen‘ im dortigen Kontext-Menü.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -
1 Like

Hallo,

ach, so ein bisschen Augenmaß hat noch keinem geschadet :wink:
Gerade erst gesehen, dass ich mir gerade eine Funktion „erdacht“ hatte, da lob ich mir mein Origin.

Anton

Makro einbauen
Hallo Michael,

ich poste hier noch mal den Makro aus dem Link von Thomas:

Option Explicit

Sub MakePlotGridSquareOfActiveChart()
 MakePlotGridSquare ActiveChart
End Sub

Sub MakePlotGridSquareOfAllCharts()
 Dim myChartObject As ChartObject
 For Each myChartObject In ActiveSheet.ChartObjects
 MakePlotGridSquare myChartObject.Chart
 Next
End Sub

Sub MakePlotGridSquare(myChart As Chart, Optional bEquiTic As Boolean = False)

 Dim plotInHt As Integer, plotInWd As Integer
 Dim Ymax As Double, Ymin As Double, Ydel As Double
 Dim Xmax As Double, Xmin As Double, Xdel As Double
 Dim Ypix As Double, Xpix As Double

 With myChart
 ' get plot size
 With .PlotArea
 plotInHt = .InsideHeight
 plotInWd = .InsideWidth
 End With

 Do
 ' Get axis scale parameters and lock scales
 With .Axes(xlValue)
 Ymax = .MaximumScale
 Ymin = .MinimumScale
 Ydel = .MajorUnit
 .MaximumScaleIsAuto = False
 .MinimumScaleIsAuto = False
 .MajorUnitIsAuto = False
 End With
 With .Axes(xlCategory)
 Xmax = .MaximumScale
 Xmin = .MinimumScale
 Xdel = .MajorUnit
 .MaximumScaleIsAuto = False
 .MinimumScaleIsAuto = False
 .MajorUnitIsAuto = False
 End With
 If bEquiTic Then
 ' Set tick spacings to same value
 Xdel = WorksheetFunction.Max(Xdel, Ydel)
 Ydel = Xdel
 .Axes(xlCategory).MajorUnit = Xdel
 .Axes(xlValue).MajorUnit = Ydel
 End If

 ' Pixels per grid
 Ypix = plotInHt \* Ydel / (Ymax - Ymin)
 Xpix = plotInWd \* Xdel / (Xmax - Xmin)

 ' Keep plot size as is, adjust max scales
 If Xpix \> Ypix Then
 .Axes(xlCategory).MaximumScale = plotInWd \* Xdel / Ypix + Xmin
 Else
 .Axes(xlValue).MaximumScale = plotInHt \* Ydel / Xpix + Ymin
 End If

 ' Repeat if "something" else changed to distort chart axes
 ' Don't repeat if we're within 1%
 Loop While Abs(Log(Xpix / Ypix)) \> 0.01

 End With

End Sub

Jetzt mach mal folgendes:
Geh in deine Arbeitsmappe und drücke Alt-F11.
Es öffnet sich der VBA-Editor.
Im Menü klickst du auf Einfügen - Modul.
Jetzt öffnet sich ein großes Fenster auf der grauen Fläche.
Kopiere den Makro-Code von hier oben in das Fenster.
Dann kannst du den VBA-Editor schließen.
Wechsle in Excel auf dein Diagrammblatt.
Nun drückst du Alt-F8.
Es erscheint ein Fenster. In der obersten Zeile ist der Name des momentan ausgewählten Makros schwarz hinterlegt. Es müsste

MakePlotGridSquareOfActiveChart

sein.
Drücke die Eingabetaste oder klicke auf Ausführen.
Danach sollte dein Diagramm 1:1 skaliert sein.
Wenn du mehrere Diagramme hast, die du alle skalieren willst, kannst du acuh den anderen Makro aufrufen.

Ach, wie schön dass es in Interet für so vieles schon Lösungen gibt.

Gruß, Andreas

1 Like

Hallo,
was haltet ihr von der (Bastel-)Idee, eine weitere Datenreihe fuer das Diagramm zu erstellen, die einen Kreis darstellt. Diesen kann man dann optisch kontrolliert von Hand einigermassen rund einstellen und wieder ausblenden.
Gruss Helmut

Grüezi Helmut

was haltet ihr von der (Bastel-)Idee, eine weitere Datenreihe
fuer das Diagramm zu erstellen, die einen Kreis darstellt.
Diesen kann man dann optisch kontrolliert von Hand
einigermassen rund einstellen und wieder ausblenden.

Das halte ich grundsätzlich für eine gute ‚Bastel‘-Idee, könnte einfacher sein, als die Gitternetzlinien auf Quadratur zu prüfen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -