Autor
|
Thema: Diagrammachse automatisch formatieren (7384 mal gelesen)
|
CAD.TM Mitglied
Beiträge: 26 Registriert: 18.02.2011
|
erstellt am: 14. Jul. 2012 23:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, kaum ist ein Problem gelöst habe ich wieder ein neues: Diesmal geht es um die Skalierung der y-Achse. In einer Tabelle habe ich mehrere y-Werte, deren Maxima und Minima immer wieder andere Werte annehmen und in einem Diagramm dargestellt werden sollen. Dabei beginnt die y-Achse standardmäßig bei 0, was aber ungünstig ist wenn sich die y-Werte beispielsweise zwischen 60 und 65 bewegen. Natürlich kann ich die y-Achse manuell anpassen aber wenn sich das Maximum auf z.B. 100 ändert, ist es im Digramm nicht mehr zu sehen... Kann ich irgendwie einstellen, dass die Skala der y-Achse immer automatisch beim kleinsten Wert beginnt und beim höchsten endet. Noch besser wäre wenn sie bei z.B. 0,9*Minimum beginnt und bei 1,1*Maximum endet. Hat da jemand eine Idee? Vielen Dank. Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 15. Jul. 2012 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 15. Jul. 2012 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
Mit ALT & F11 in den VBA-Editor wechseln, EINFÜGEN / MODUL und untenstehenden Code einfügen. Diagramname, Tabellenblattname und Bereich anpassen. Diagramm anklicken und Makrozuweisen. Code: Sub Diagramm1_Klicken_Auf() ActiveSheet.ChartObjects("Diagramm 1").Activate 'Namen anpassen With ActiveChart.Axes(xlValue) .MaximumScale = WorksheetFunction.Max(Sheets("Tabelle1").Range("C2:C9")) * 1.1 'Bereich anpassen .MinimumScale = WorksheetFunction.Min(Sheets("Tabelle1").Range("C2:C9")) * 0.9 'Bereich anpassen .MinorUnitIsAuto = True .MajorUnitIsAuto = True .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With ActiveWindow.Visible = False Range("A1").Select 'um den Fokus vom Diagramm zu entfernen End Sub
Per Klick auf das Diagramm skaliert sich die Y Achse. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD.TM Mitglied
Beiträge: 26 Registriert: 18.02.2011
|
erstellt am: 15. Jul. 2012 12:02 <-- editieren / zitieren --> Unities abgeben:
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 15. Jul. 2012 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
Hi, in VBA kann man zu 99% aller Fälle auf Select und Activate verzichten - bei Diagrammen ebenso, dann wird auch das Schließen des Diarammfensters und erneutes Selektieren einer Zelle überflüssig, um ins Tabellenblatt zurückkehren zu können:
Code: Sub Diagramm1_Klicken_Auf() With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue) .MaximumScale = WorksheetFunction.Max(Sheets("Tabelle1").Range("C2:C9")) * 1.1 'Bereich anpassen .MinimumScale = WorksheetFunction.Min(Sheets("Tabelle1").Range("C2:C9")) * 0.9 'Bereich anpassen ' .MinorUnitIsAuto = True ' .MajorUnitIsAuto = True ' .Crosses = xlAutomatic ' .ReversePlotOrder = False ' .ScaleType = xlLinear ' .DisplayUnit = xlNone End With End Sub
Das Diagramm muss man nicht unbedingt mit dem Namen ansprechen, man kann auch einen Index verwenden. Das macht sich sehr günstig, falls man das Diagramm löscht und ein neues einfügt, denn dann könnte möglicherweise der Name nicht mehr stimmen. Bei mehreren Diagrammen im Tabellenblatt richtet sich der Index danach, in welcher Reihenfolge die Diagramme erstellt wurden. Die im Code auskommentierten Zeilen sind eigentlich überflüssig, da es die Standardeinstellungen sind. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 16. Jul. 2012 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
Hi, wenn man sich das anpassen der Bereiche auch noch sparen will
Code: Sub Diagramm1_Klicken_Auf() With ActiveSheet.ChartObjects(1).Chart .Axes(xlValue).MaximumScale = WorksheetFunction.max(.SeriesCollection(1)) * 1.1 .Axes(xlValue).MinimumScale = WorksheetFunction.min(.SeriesCollection(1)) * 0.9 End With End Sub
bei einer belibiegen Anzahl von Datenreihen etwas aufwendiger
Code: Sub Diagramm1_Klicken_Auf() Dim min As Double Dim max As Double min = 1.79769313486231E+308 max = -1.79769313486231E+308 With ActiveSheet.ChartObjects(1).Chart For Each ser In .SeriesCollection min = WorksheetFunction.min(ser.Values, min) max = WorksheetFunction.max(ser.Values, max) Next .Axes(xlValue).MaximumScale = max * 1.1 .Axes(xlValue).MinimumScale = min * 0.9 End With End Sub
Mal nebenbei, wenn ich die Axenskalierung auf Automatic belasse erhalte ich fast das selbe Ergebniss. Sogar noch besser, weil gerundet (110 wir nicht zu 99 sondern zu 100). [EDIT]man hätte gleich von vorn lesen sollen, natürlich gibt es diese Einstellung (siehe Anhang)
Gruß Peter [Diese Nachricht wurde von Comos User am 16. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Z.Sch. Mitglied
Beiträge: 7 Registriert: 14.10.2014
|
erstellt am: 14. Okt. 2014 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
Guten Morgen zusammen, ist ja super mit dem Code. Ich müsste den bei mir allerdings etwas anpassen und das funktioniert nicht so ganz.- Folgendes: Ich habe ein Diagramm das ähnlich einem Gant Diagramm aussieht. Die x Achse (unten) nimmt das Datum einer Spalte auf und die horizontale sekundärachse macht was sie will. Sie kann ich nicht auf "auto" einstellen, da ich nicht auswählen kann, dass die Werte "Automatische Auswahl basierend auf Daten" gewählt werden. Wie könnte denn der Code für die Horizontale Sekundärachse aussehen? (Das Datum ist z.b. in Spalte F6:F50) Danke für eure Hilfe Mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 15. Okt. 2014 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für CAD.TM
Hi, also so richtig schlau werde ich aus deinem Beitrag nicht - geht es darum, das Maximum/Minimum der Horizontalen Sekundärachse per VBA einzustellen? Dann nach diesem Prinzip: Code: .Axes(xlCategory, xlSecondary).MaximumScale = 10
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |