Mahlzeit Hans,
Sieht man danach in die Bedingte Formatierung rein, so hat jede Spalte Ihre eigene Regel
Ich glaube Du verstehst nicht so wirklich worauf ich hinaus wollte, also jetzt mal andersrum.
Excel bis, ich glaube zur 2003er Version, SO bis zur 9er, OO.o von Anfang an bis zur letzten, AOO seit Anfang und LO von Anfang bis zur ??? Version hatten in der Bedingten Formatierung nur 3 Bedingungen über das Menü zur Auswahl. Regeln gabs da nicht. Und wie das jetzt in der 6er Linie aussieht, das mit Regeln, keine Ahnung. Ich weiss wohl das in meiner 5er Version es in der Bed.For. so etwas wie eine Übersicht aller Formatierungen gibt, und wenn man auf eine kllickt um sie zu bearbeiten, gibt es dort auch die Bedingungen von 1. bis zur Xten. Aber Regeln sehe ich nicht oder ich verstehe es nicht.
Jetzt kapito?
Aber jetzt bin ich wirklich neugirig wie man in beiden Versionen, so mal auf die schnelle, einen Turbo einbauen könnte. Jetzt egal ob dieser Funktioniert oder nicht.
Juuuhhhhuuuu! Du bist neugierig geworden. Ziel erreicht
Also dann werde ich dich nicht länger auf die Folter spannen.
Es gibt eigentlich 3 Arten wie man einen Boost aktivieren kann.
1.
Bildschirm Aktualisierung Aus- beziehungsweise Einschaltten.
Nützlich wenn man auf dem Tabellenblatt wo man sich grad befindet die Aktualisierung des Bildschirms nicht so sehr miterleben möchte. Das spart schon Zeit ein. Habe jetzt keine Lust dazu das in meiner 5er LO zu testen (weiss jetzt auch nicht ob dort XRAY installiert ist).
Auf jeden Fall ist es das wovon ich erzählte.
2.
Wer sagt denn das man dem Programm unbedingt zuschauen muss wenn es in der Tabelle irgendwas rumkritzelt. Also das Makro einfach von einem anderen Tabellenblatt aus starten. Das kannst Du ja selber mal testen, in dem Du auf der "Tabelle1" den Button hinlegst, von dort aus das Makro startest, und wenn Makro fäddisch einfach auf das andere Blatt per Makro wechseln. Dürfte der gleiche Effekt sein wie Punkt 1.
Und das wäre derjenige den ich als zweiten angedeutet hatte.
3.
Verdammt schwer, und habe ich jetzt auch keine Lust dazu das zu erarbeiten. Denn dabei wird mit ARRAY gearbeitet. Das läuft dann in etwa so ab.
Den gesamten Zellbereich, also alle Monate, in ein ARRAY einlesen, die gesamte Arbeit in diesem ARRAY erledigen, und danach das ARRAY wieder aufs Tabellenblatt zurückschreiben. Das wäre dann der, ... ich sags mal so rum ..., "Hyper-Speed". Es gibt dann nix schnelleres mehr.
Natürlich ist es da von Vorteil wenn das Makro schon im Vorfeld weitestgehend optimiert ist.
Zu deiner Überarbeitung.
Selbst wenn meine Beispieldatei etwas langsamer ist als dein jetziger Code, so legst Du dennoch einfach viel zu viel Hand an um estwas auszurechnen. Ich lasse wirklich das Makro für mich arbeiten, während Du FÜR das Makro arbeitest. Klar ist mein Makro Gerschwindigkeitsmäßig nicht optimiert, aber es ist ersichtlich das ich Rechnen lasse.
Das könntest Du aber auch bei dir anwenden, das das Makro selber rechnet.
Deine Idee bestimmte Monate zu Gruppieren, da sie gleich lang sind, ist wohl nicht schlecht. Aber die Monatslänge kannst Du doch vom Makro selber ausrechnen lassen. Wenn ein Tabellenblatt schon mit Datum und Zeit umgehen kann, dann kann das ein Makro auch.
Was machst Du im Makro hiermit?
DU rechnest
FÜR das Makro. Und deine Berechnungen sind Statisch, sie reagieren nicht flexibel, was dann Dynamisch wäre. Für nächtes Jahr, also 2020, passt das ja auch alles. Aber was ist mit diesem Jahr, oder den Jahren nach 2020? Da musst Du wieder Hand anlegen, was Plöte ist.
Hier mal eine kurze Spiel-SUB, die dir zeigt das man auch das Makro rechnen lassen kann.
Code: Alles auswählen
Sub WievieleTage
oFunctionAccess = CreateUnoService("com.sun.star.sheet.FunctionAccess")
iStartJahr = 2020
iMonat = 2
iTage = oFunctionAccess.callFunction( "TAGEIMMONAT", Array(CLng(DateSerial(iStartJahr, iMonat, 1)))
PRINT iTage
End Sub
Das Startjahr (iStartJahr) ist jetzt zum testen fest vorgegeben, kannst Du aber auch später aus einer Tabellenzelle auslesen lassen.
Der Monat (iMonat) ist jetzt wohl auch fest, aber mit dem Jahr und Monat kannst Du ruhig mal ein bisschen rumspielen um zu sehen was dir diese Spiel-SUB dann ausgibt.
Die 1 in "Array(.... 1))" ist ein fester Wert der den 1. Tag eines Monat darstellt, genauso gut könntest Du jeden Wert zwischen 1 und 28 nehmen. Ich muss dir ja wohl nicht sagen warum nicht größer 28.
Die Zeile 'oFunctionAccess ...' kannst Du dann im Makro beispielsweise gleich zu Anfangs platzieren.
Jetzt überleg mal wie dir diese "Kleinigkeit" hilfreich sein kann
Gruß
balu