23.12.2020, 19:01 (Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2020, 19:01 von Medic89.)
Hallo Helmut,
danke nochmal für deine Arbeit, nun funktioniert es wie es soll, nur die vertikalen Gitternetzlinien werden durch die farbigen Ereigniszeilen verdeckt und unter dem diagramm werden immer einige Leerzeilen angezeigt. Ja, ein paar Ereignisbeschriftungen habe ich nach rechts geschoben, allerdings nun über die Formatieren Funktion von Excel.
1. Wenn du die farbigen Säulen halb transparent machst, sieht man die Gitternetzlinien wieder. 2. Die Leerzeilen kann man verhindern, wenn man mit einem sehr kleinen Makro die Untergrenze der Y-Achse abhängig von den Daten einstellt.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:1 Nutzer sagt Danke an Ego für diesen Beitrag 28 • Medic89
nachdem ich mein Diagramm nun zu einer späteren Uhrzeit starten möchte, beginnt die X-Achse nach Umstellung aller Werte auf 10:00 trotzdem um 09:00. Wenn ich das Menü zur Formatierung der X-Achse aufmache, sehe ich als Minimum und Maximum nur dimmensionslose Zahlen, die sich zwar ändern lassen, aber dann zerschießt es mir sofort die X-Achse. Wie geht man das an?
24.12.2020, 17:50 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2020, 17:54 von Ego.)
Hallo M...,
zu:
Zitat:... Achse ... sehe ich als Minimum und Maximum nur dimmensionslose Zahlen ...
Ja das ist so in Punktdiagrammen. Wenn man aber weis, dass in Excel die Uhrzeiten Zahlen zwischen 0 und 1 sind kann man sich leicht behelfen (zB. ist 0,375 = 3/8 = 9/24 = 9:00 und 0,0104166667 = 1/96 = 1/24/4 = 0:15).
1. Ich trage die Uhrzeit oder den Bruch als Formel in eine Excelzelle, mache daraus eine Zahl mit vielen Nachkommastellen und kopiere möglichst viele davon in die Achsenfelder.
2. Das Maximum der X-Achse würde ich auf "Auto" lassen und die Teilstriche auf 0,00347222 = 0:05 setzen.
ps. Wenn du wie in "#12 2." geschrieben die Untergrenze der Y-Achse anpasst, könntest du im gleichen Makro die Untergrenze der X-Achse anpassen.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
ich habe nun ein kleines Makro eingebaut (s. unten), womit auf Knopfdruck sowohl die X- als auch die Y-Achse skaliert werden, nun wäre noch die Frage, ob es möglich ist, die Zeilen je nach Inhalt automatisch zu formatieren (also eine bestimmte Farbe und andere Transparenz)
Sub Skalierung()
ActiveSheet.ChartObjects("Diagramm 3").Activate
With ActiveChart.Axes(xlCategory) .MaximumScale = ActiveSheet.Range("F127") .MinimumScale = ActiveSheet.Range("F79") End With
With ActiveChart.Axes(xlValue) .MaximumScale = ActiveSheet.Range("J76") .MinimumScale = ActiveSheet.Range("K76") End With
29.12.2020, 15:44 (Dieser Beitrag wurde zuletzt bearbeitet: 29.12.2020, 15:54 von Ego.)
Hallo M...,
A) zu
Zitat:... ich habe nun ein kleines Makro eingebaut (s. unten), womit auf Knopfdruck sowohl die X- als auch die Y-Achse skaliert werden ...
1. Ich würde die MaximumScale nicht per Programm schreiben, da ich die Automatik hier für ausreichend halte und die Maxima nicht manuell pflegen wollte. 2. Da hast für die Zellen feste Adressen eingetragen. Anders als in Formeln werden sie im Makro nicht angepasst, wenn ich zB. eine Zeile davor einfüge. Ich empfehle daher den Zellen einen Namen zu geben und sie im Makro über diesen Namen anzusprechen (siehe meine Signatur). 3. (nur Geschmacksache) Du solltest dir überlegen ob du im Makro für das Diagramm immer den Namen "Diagramm 3" lesen und schreiben willst oder ob du dem Diagramm einen sprechenden Namen gibst.
B) zu
Zitat:... ob es möglich ist, die Zeilen je nach Inhalt automatisch zu formatieren ...
Über das Makro ist es möglich. Ich empfehle hinter der Säulengrösse eine Spalte einzufügen und dem Bereich einen Namen zu geben. Die Transparenz würde ich als Zahlenwert eintragen und die gewünschte Farbe als Hintergrund formatieren. Beides kann im Makro für die Säulen übernommen werden.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
das Problem ist denke ich, ein Makro zu schreiben, in dem mehrere if then Funktionen eingebaut sind (Wenn in einer Zeile etwas mit xy steht dann Farbe 1, wenn za dann Farbe 2, usw.).
29.12.2020, 22:01 (Dieser Beitrag wurde zuletzt bearbeitet: 29.12.2020, 22:01 von Ego.)
Hallo M...,
eigentlich nicht.
Trotzdem bleibe ich bei meiner Empfehlung die Farben in der Tabelle zu bestimmen.
Hier ein Makrovorschlag und in der Anlage die Beispieldatei.
Code:
Private Sub cbTuwat_Click() Dim Z As Long Dim Farben As Variant Dim rngFarben As Range Dim ser As Series
Farben = Me.Range("Farben").Value Set rngFarben = Me.Range("Farben").Cells(1, 1) With Me.ChartObjects("Diagramm").Chart
.Axes(xlCategory).MinimumScale = Me.Range("MinX").Value 'Minima und Maxima festlegen .Axes(xlValue).MinimumScale = Me.Range("MinY") .Axes(xlCategory).MaximumScale = Me.Range("MaxX").Value .Axes(xlValue).MaximumScale = Me.Range("MaxY")
For Each ser In .FullSeriesCollection 'Farben und Transparenz den Säulen zuordnen For Z = 1 To UBound(Farben, 1) If Farben(Z, 1) = ser.Name Then ser.Format.Fill.ForeColor.RGB = rngFarben.Offset(Z - 1, 0).Interior.Color ser.Format.Fill.Transparency = rngFarben.Offset(Z - 1, 1).Value Exit For End If Next Z Next ser End With End Sub
Das Makro muss im VBA-Projekt des Blattes sein (Daher Me.), wird über den Button "cbTuwat" aufgerufen und benötigt im Blatt vier benannte Zellen (MinX, MaxX, MinY und MaxY) und einen benannten Bereich (Farben).
Der Bereich "Farben" hat mindestens zwei Spalten. Wenn der Text in der ersten Spalte mit dem Namen einer Datenreihen übereinstimmt wird 1. die Hintergrundfarbe der Zelle als Farbe der Säule übernommen und 2. der Wert der benachbarten Zelle als Transparenz der Farbe eingerichtet.
ps. Wenn du in der ersten Spalte des Bereiches "Farben" die Farben über bedingte Formatierung bestimmst, must du im Makro ".Interior.Color" durch ".DisplayFormat.Interior.Color" ersetzen.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
das mit dem .DisplayFormat.Interior.Color hat leider nicht funktioniert, wenn die Zelle der ersten Spalte einfarbig ist, wird diese übernommen (ich Färbe die Zellen der ersten Spalte mit der bedingten Formatierung), sobald aber ein Muster zum EInsatz kommt, wird dieses nicht mehr übernommen.
Außerdem habe ich grade versucht, das Makro in meine Originaldatei zu übertragen, ich habe es bei Tabelle 1 eingefügt und die Bereiche Farben und Min/Max definiert, allerdings kann ich das makro keiner Schaltfläche zuordnen.