Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wert in bedingter formatierung ersetzen

Wert in bedingter formatierung ersetzen
11.09.2024 16:17:22
nagusMC
Hi zusammen,

ich habe einen Jahres Kalender gebaut, in dem die Wochen- und Feiertage mit einer bedingten Formatierung per Formel angepasst werden. Das ganze sind 12 Blöcke mit jeweils zwei Formatierungen pro Block, sowie weiteren Formatierungen (sollten so 8 pro block sein) um weitere Prüfungen vorzunehmen.

Eine Formel für die bedingte Formatierung sieht so aus:
=ODER(WOCHENTAG(N$3;11)=6;(WOCHENTAG(N$3;11)=7);WENN(ISTFEHLER(SVERWEIS(N$3;Feiertage!$c$2:$c$15;1;FALSCH));FALSCH;SVERWEIS(N$3;Feiertage!$c$2:$c$15;1;FALSCH)))


Ich möchte jetzt in allen bedingten Formatierungen den Teil Feiertage!$c$2:$c$15 gegen Feiertage!$d$2:$d$15 ersetzen.

Wie bekomme ich das hin?

VBA habe ich eher bescheidene Kentnisse ....
Anzeige

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:27:42
Uduuh
Hallo,
füge vor Feiertage!C:C eine Spalte ein.

Statt des SVERWEIS würde ich mit ZÄHLENWENN arbeiten.

Gruß aus'm Pott
Udo
AW: Wert in bedingter formatierung ersetzen
11.09.2024 19:38:38
daniel
HI
wenn du unbedingt willst, mit folgendem Makro kannst du die Formeln der Bedingten Formatierung im aktiven Tabellenblatt überarbeiten und neuen Zellbezug gegen alten Zellbezug austauschen:

Sub test()

Dim FC As FormatCondition
Dim alt As String
Dim neu As String


alt = "Feiertage!$B$2:$B$15"
neu = "Feiertage!$C$2:$C$15"

For Each FC In ActiveSheet.Cells.FormatConditions
If FC.Formula1 Like "*" & alt & "*" Then
FC.Modify xlExpression, , Replace(FC.Formula1, alt, neu)
End If
Next
End Sub


Gruß Daniel
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 09:38:04
Yal
Moin,

das einmalige Umstellen geht wahrscheinlich am leichteste mit dem VBA Code von Daniel.

Ergänzend dazu, falls nächstes Jahr von D auf E wieder angepasst werden soll, 2 Anregungen:
- müssen die aktuelle Feiertag unbedingt in Spalte D sein? was Spricht dagegen, die bisherigen Feiertag von C auf D zu verschieben und die aktuellen in C abzulegen?
- man könnte den den Bereich C2:C15 benennen und die bed.Form auf dem Namen einrichten. Dann braucht man nur diesen Namen jetzt auf D2:D15 zu legen, und nächstes Jahr auf E2:E15. Eine einmalige Anpassung der bed.Form kommst Du nicht drum, aber dann echt einmalig.

VG
Yal
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 10:27:13
nagusmc
Erstmal Danke Daniel!
Das ist genau das was ich eigentlich wollte ;-)

Ich kämpfe allerdings noch mit dem Script, weil es mir Fehler wirft ....
Da ich keine Ahnung von VBA habe: ich packe das Script einfach in den Code Editor und lasse es laufen?

Das sind die Fehler die er dann wirft

Line #1: ';' expected.
Sub test()

Line #2: ';' expected.
Dim FC As FormatCondition

Line #2: ';' expected.
Dim FC As FormatCondition

Line #2: ';' expected.
Dim FC As FormatCondition

Line #3: ';' expected.
Dim alt As String

Line #3: ';' expected.
Dim alt As String

Line #3: ';' expected.
Dim alt As String

Line #4: ';' expected.
Dim neu As String

Line #4: ';' expected.
Dim neu As String

Line #4: ';' expected.
Dim neu As String

Line #10: ';' expected.
For Each FC In ActiveSheet.Cells.FormatConditions

Line #10: ';' expected.
For Each FC In ActiveSheet.Cells.FormatConditions

Line #10: ';' expected.
For Each FC In ActiveSheet.Cells.FormatConditions

Line #10: ';' expected.
For Each FC In ActiveSheet.Cells.FormatConditions

Line #11: ';' expected.
If FC.Formula1 Like "*" & alt & "*" Then

Line #11: ';' expected.
If FC.Formula1 Like "*" & alt & "*" Then

Line #11: ';' expected.
If FC.Formula1 Like "*" & alt & "*" Then

Line #11: ';' expected.
If FC.Formula1 Like "*" & alt & "*" Then

Line #12: ';' expected.
FC.Modify xlExpression, , Replace(FC.Formula1, alt, neu)

Line #12: Expression expected.
FC.Modify xlExpression, , Replace(FC.Formula1, alt, neu)

Line #13: ';' expected.
End If

Line #15: ';' expected.
End

@Yal, ursprünglich wollte ich das genau so machen wie Du es beschrieben hast. Ich habe dann aber festgestellt, dass ich mehrere Jahre im Zugriff brauche. Daher dann einfach pro Jahr den Bezug zu den Feiertagen ändern.

Thx
Nagus
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 10:46:22
daniel
also ja, script kommt in ein allgemeines Modul, dann musst du noch das Tabellenblatt aktivieren, welches bearbeitet werden soll und ggf die Texte für die Variablen "alt" und "neu" anpassen, je nachdem welche Zellbezüge ausgetauscht werden müssen, dann kannst du den Code laufen lassen.


ich hab jetzt ehrlich gesagt, keine Lust, für lau VBA-Grundlagenschulung im Forum zu machen.
wenn du VBA lernen willst, mach dich schlau, beispielsweise hier.

https://online-excel.de/excel/grusel_vba.php?f=6

wenn du kein VBA lernen möchtest, weil du es sonst nicht benötigst, dann mach dir die Mühe und ersetze die statischen Zellbezüge Feiertage!$B$2:$B$15 durch die die berechneten Zellbezüge Index(Feiertage!$2:$15;0;Vergleich($A$2;Feiertage!$1:$1;0))
damit referenzierst du immer auf die passende Spalte deiner Feiertagsliste in Abhängigkeit des Jahren in Zelle A2.
wenn du jetzt ein neues Jahr anlegst, musst du nur noch das richtige Jahr dort eintragen und der Rest geht automatisch.
wie du dein Formelwerk vereinfachen kannst, so dass du nicht so viele Stellen hast die du überarbeiten musst, habe ich dir ja schon in einer der früheren Antworten gezeigt.

Gruß Daniel
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 12:12:42
nagusmc
Hi Daniel,
Danke für den Hinweis mit dem Index. Das hilft mir eigentlich schon weiter. Das kannte ich so noch nicht und habe ich übernommen.
Mit dem VBA das lasse ich weg - ich habe keine Zeit mich nur dafür einzuarbeiten. Ich ändere die Formatierung einmal mit dem Index im jeweiligen Blatt und dann wird es ja pro Jahr gezogen, so wie ich es wollte.
:D

Die Darstellung nebeneinander mit 365 Tagen hatte ich auch schon, macht es aber unübersichtlich, weil ich in paar weitere Abgleiche in dem Blatt mache und dann ist die Darstellung untereinander überichtlicher.


Danke für die Unterstützung!
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 11:50:02
Yal
Letzter Tipp: alle Feiertage (die müssen ein Datum inkl Jahr haben) übereinander und auf C:C scannen anstatt C2:C15 bzw D2:D15.

das fehlende Semikolon deutet daraus hin, dass es versucht wird, der Code als TypeScript zu interpretieren. Du bist folglich in dem Skript-Editor, den man über den Reiter "Automatisieren" erreichen kann. Falsch. Du musst zuerst den Reiter "Entwicklertools" sichtbar machen, um den VBA-Editor sichtbar zu machen. Alternativ ist Alt+F11.

Aber wie Daniel es sagt, ein minimales Wissen über VBA und de Interaktion VBA/Excel solltest Du dir schnelltens eineignen.

VG
Yal
Anzeige
AW: Wert in bedingter formatierung ersetzen
12.09.2024 12:19:39
nagusmc
Danke Yal,
Du hast natürlich recht ich war nur im Script Editor.
VBA lohnt sich nicht für mich - ich brauche das zu selten. Das letzte Mal vor mehr als 10 Jahren ... PS ist wichtiger für mich :D
Aber Danke für den Hinweis - hätte eigentlich selber merken müssn ...
NagusMC
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:29:12
SF
Hola,
ergänzend dazu:
=oder(wochentag(N$3;2)>5....
Gruß,
steve1da
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:35:02
NagusMC
Danke für die Tips, aber die lösen nicht mein eigentliches Problem:
selbst wenn ich das so ändere, muss ich in 24 bedingten Formatierungen, jeweils zwei mal die Werte ändern.

Über suchen und ersetzen klappt das nicht und sich durchklicken ist auch suboptimal, da das Risiko von Fehlern besteht.

Daher ja meine Frage: geht das bspw. über ein VBA Skript?

Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:37:21
SF
Warum überhaupt 12 Blöcke? Hat das nur optische Gründe?
Wenn man den Aufbau kennen würde könnte man evtl eine Formel entwickeln die für alle Blöcke gilt.
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:54:12
nagusmc
Die Datei sieht so aus:
Userbild

12 Blöcke = Monate

Die bedingte Formatierung ist für die Sonn- und Feiertage, damit diese grau werden. Jetzt habe ich ein neues Blatt für 2025 erstellt (2024) kopiert und muss nur noch das Datum oben anpassen und habe meinen angepassten Kalender. Nur der Focus auf die Feiertage passt nicht.
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 17:15:21
daniel
HI

berechne das Datum der jeweiligen Zelle so, dass es für alle Zellen allgemeingültig ist.
also nicht N3, sondern über die Funktion DATUM(Jahr;Monat;Tag)
das Jahr steht in $A$2
als Tag nimmst du Spalte()-13 (dein Kalender beginnt in Spalte 14, dh du brauchst für Spalte N die 1)
den Monat auszurechnen wird etwas komplizierter und erfordert, dass du für jeden Monat die gleiche Anzahl Zeilen für die Mitarbeiter hast.
ein Monat umfasst bei dir 18 Zeilen (2 Überschrift mit Datum, 15 Mitarbeiter, 1 Trennzeile) und das ganze beginnt in Zeile 3
daher kannst du die Monatsnummer so berechnen: Quotient(Zeile()-3;18)+1 (Quotient ist der Ganzahlwert einer Division

dh statt N3 nimmst du in deiner Formel dann DATUM($A$2;QUOTIENT(Zeile()-3;18)+1;Spalte()-13)
und damit die Zwischenzeile nicht grau wird, fügst du als Bedingung hinzu: REST(ZEILE();18)>2

wenn du das hinzufügst, dann kannst du deine Bedingte Formatierung für den ganzen Kalender gültig machen und brauchst ihn nicht in Blöcke zu unterteilen.

und noch ein Tipp: seit Excel 2010 vermeidet man Fehler beim Sverweis nicht mehr mit:
Wenn(IstFehler(SVerweis(...));"xxx";SVErweis(...))
sondern mit
WennFehler(SVErweis(...);"xxx")
und seit Excel 365 kann man auch den XVERWEIS verwenden.
oder du sparst dir das ganze, denn die Bedingte Formatierung verarbeitet auch den Fehler und betrachtet ihn wie ein FALSCH. dh wenn im Fehlerfall des SVerweises keine Färbung passieren soll, dann kannst du die Fehlerprüfung auch ganz weglassen.
oder du prüfst mit ZählenWenn, ob das Datum in der Feiertagsliste vorhanden ist.

Gruß Daniel

Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 17:22:12
nagusmc
Hey Danke für die umfasende Rückmeldung.

Alle meine Formatierungen funktionieren und ich habe keine Probleme.

Nur die Feiertage ändern sich von Jahr zu Jahr .... Also müssen diese jedesjahr angepasst werden. Auf die verweise ich in meiner bedingten Formatierung.
Und die leigen in dem Blatt Feiertage Spalte B2:B15 (hatte ich schon angepasst: $c$2:$c$15)

kann ich den Teil aus der bedingten formatierung per VBA oder Makro von $b$2:$b$15 auf $c$2:$c$15 in allen bedingten Formatierungen im Blatt ändern ?
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 18:01:15
daniel
ja, du kannst dir ein Makro schreiben, dass die bedingten Formatierungen durchwühlt und dann die Zellbezüge ersetzt.

aber warum verwendest du keinen Namen?
du kannst einem Namen einen Zellbereich zuweisen.
den Namen kannst du dann anstelle des Zellbezugs in Formeln und auch in der bedingten Formatierung verwenden.
wenn sich dann der Zellbezug ändert, dann änderst du den einmalig in der Namensdefinition und nicht überall.

oder: warum berechnest du die Datumswerte der Feiertage nicht auf Basis des Jahres in Zelle A2?
soweit mir bekannt, haben die deutschen Feiertage einen festen Termin im Jahr, also beispielsweise erster Mai: =Datum($A$2;5;1)
oder sie hängen ab vom Ostertermin (soundsoviel Tage vor oder nach Ostern). Den Ostersonntag kann man berechnen aus der Jahreszahl berechnen (Gaussche Osterformel: https://www.pcs-campus.de/excel/ostern_berechnen/ )
und somit braucht man keine wechselnden Zellbezüge für die Feiertage.
oder du hast die Feiertage für die verschiedenen Jahre in einer Tabelle hinterlegt und ziehst dann per Formel (wahrsacheinlich WVerweis) die zum gewählten Jahr passenden Daten in den Zellbereich, den deine Bedingte Formatierung verwendet.

Aber die Bedingte Formatierung regelmäßig anzupassen ist unnötiger Aufwand.

Gruß Daniel
Anzeige
ergänzend zur Feiertagsberechnung:
12.09.2024 08:28:21
Pierre
Hi,

hier mal eine fast vollständige Auflistung, wobei der jeweilige Feiertag im aktuellen Jahr berechnet wird, wenn es für z. B. 2025 schon vorab berechnet werden soll, müssten natürlich die Formeln entsprechend angepasst werden:
Userbild

PS: Frauentag z.B. habe ich nicht in der Liste ergänzt, da für mich irrelevant.

Ach ja, die Kästchen können ignoriert werden, damit kann man die jeweiligen Feiertage ab- bzw. zuschalten. Dadurch wird aber nichts wesentliches der Formel verdeckt.

PPS: Ja, diese Auflistung dürfte manch einem bekannt vorkommen, ist auch tatsächlich meinerseits auch nur hier aus dem Forum geklaut ;-)

Gruß Pierre
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 16:50:27
Onur
Wenn du wirklich 12 Blöcke brauchst, hast du was falsch gemacht.
Poste mal die Datei.
AW: Wert in bedingter formatierung ersetzen
11.09.2024 17:14:31
nagusmc
Hier die bsp. Datei https://www.herber.de/bbs/user/172169.xlsx

Aber eigentlich wollte ich nur eine Möglichkeit, wie ich einen Teil einer bedingten Formatierung, welche mehrfach (24 mal), unterschiedlich in einem Blatt vorkommt aber immer einen Festen (gleichen Teil hat) genau diesen verändern kann.
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 18:18:14
Onur
Wenn mann es RICHTIG macht, reicht EINE bedingte Formatierung statt 12.
Guckst du hier:
https://www.herber.de/bbs/user/172171.xlsx
Adresse der Feiertage steht ganz vorne in der Formel.
Aber es ist Blödsinn, ZWEI (sogar drei) Listen mit Feiertagen zu haben - und das auch noch auf verschiedenen Blättern - EINE Liste reicht völlig, wo du ALLE Feiertage aus allen Jahren untereinander auflistest.
Anzeige
AW: Wert in bedingter formatierung ersetzen
11.09.2024 18:46:12
daniel
ja "nur" ist gut gesagt.
ganz so einfach ist das nicht.
deine fielen Bedingten Formatierungen sind unfug.

richte das so ein, dass du mit einer auskommst, die für den ganzen Kalender gilt.
am besten wäre, wenn du den Kalender neu gestaltest, dh der Kalender hat eine Zeile pro Mitarbeiter und ist 365 Spalten breit (keine sorge, dein Excel kann das)
deine Anordnung kommt noch aus der Zeit, als man an Papier gebunden war oder vielleicht noch aus Excel 2003er Zeiten, als die Spalten auf 255 begrenzt waren.

wenn du bei dieser Anordnung bleiben willst, würde ich noch eine Spalte hinzufügen, in welcher die Monatsnummer in jeder Zelle steht.
das vereinfachst es dir, eine Bedingte Formatierung für den ganzen Bereich zu erstellen

den Zellbezug für die Feiertage würde ich berechnen mit der Formel:
=Index(Feiertage!$2:$15;0;Vergleich($A$2;Feiertage!$1:$1;0))

dann referenziert der automatsich auf die zum Jahr in Zelle A2 passende Spalte der Feiertagsliste und du musst da nie wieder was ändern.

Gruß Daniel

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige