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!
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.
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:
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.
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?
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.
ach, so ein bisschen Augenmaß hat noch keinem geschadet
Gerade erst gesehen, dass ich mir gerade eine Funktion „erdacht“ hatte, da lob ich mir mein Origin.
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.
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
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.