Bedingte Formatierung mit VBA
#31
So sieht jetzt mein Code aus!
Code:
Sub BedingteFormatierungBeispiel()
'Bereich definieren
Dim MeinBereich As Range 'Ferien
Dim MeinBereich2 As Range 'Ferien
Dim MeinBereich3 As Range 'FeiertageSamstag
Dim MeinBereich4 As Range 'Feiertage
Dim MeinBereich5 As Range 'Brückentage
Dim MeinBereich6 As Range 'Heute

Dim strFormula As String 'Ferien
Dim strFormula2 As String 'Ferien
Dim strFormula3 As String 'FeiertageSamstag
Dim strFormula4 As String 'Feiertage
Dim strFormula5 As String 'Brückentage
Dim strFormula6 As String 'Heute

Set MeinBereich = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
Set MeinBereich2 = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
'FeiertageSamstag
Set MeinBereich3 = Range("$G$11:$L$11, $N$11:$S$11, $U$11:$Z$11, $AB$11:$AG$11, $G$21:$L$21, $N$21:$S$21, $U$21:$Z$21, $AB$21:$AG$21, $G$31:$L$31, $N$31:$S$31, $U$31:$Z$31, $AB$31:$AG$31")
'Feiertage
Set MeinBereich4 = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
'Brückentage
Set MeinBereich5 = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
'Heute
Set MeinBereich6 = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
'Ferien markieren
strFormula = "=WENN(UND($AE$37=""Ja"";ZÄHLENWENN(Feiertage;G6)<>1);ZÄHLENWENNS(Ferien_von;""<=""&G6;Ferien_bis;"">=""&G6))"
strFormula2 = "=WENN(UND($AE$37=""Ja"";ZÄHLENWENN(Feiertage;G6)<>1);ZÄHLENWENNS(Ferien_von;""<=""&G6;Ferien_von;"">=""&G6))"
strFormula3 = "=ZÄHLENWENN(Feiertage;G11)=1"
'Feiertage
strFormula4 = "=ZÄHLENWENN(Feiertage;G6)=1"
'Brückentage
strFormula5 = "=WENN($AE$41=""Ja"";ODER((REST(G6;7)=2)*ZÄHLENWENN(Feiertage;G6+1);(REST(G6;7)=6)*ZÄHLENWENN(Feiertage;G6-1)))"
'Heute
strFormula6 = "=UND($AE$39=""Ja"";G6=HEUTE())"
'Bereiche löschen
MeinBereich.FormatConditions.Delete
'Bedingte Formatierung anwenden
'Ferien
MeinBereich.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula
MeinBereich.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
MeinBereich2.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula2
MeinBereich2.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
'FeiertageSamstag
MeinBereich3.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula3
MeinBereich3.FormatConditions(1).Interior.Color = RGB(255, 204, 153) '255, 0, 0 (+Schriftfarbe Rot ????
'Feiertage
MeinBereich4.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula4
MeinBereich4.FormatConditions(1).Interior.Color = RGB(255, 204, 153) '255, 0, 0 (+Schriftfarbe Rot ????
'Brückentage
MeinBereich5.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula5
MeinBereich5.FormatConditions(1).Interior.Color = RGB(0, 176, 240)
'Heute
MeinBereich6.FormatConditions.Add Type:=xlExpression, _
        Formula1:=strFormula6
MeinBereich6.FormatConditions(1).Interior.Color = RGB(146, 208, 80)
End Sub

Nur setzt er die erste Bedingung auf Grün (Eigendlich letztes für Heute()) und nicht auf Gelb.

alle anderen werden geschrieben, allerdings ohne Hintergrundfarbe.
Antworten Top
#32
Hallöchen,

also, 4 Dinge

- warum Du so viele Bereiche definierst, erschließt sich mir nicht. Im Grunde sind es doch nur zwei unterschiedliche.
- der zweite Bereich, also die Samstage, braucht doch eigentlich keine gesonderte bedingte Formatierung?
- wenn Du mehrere Formate definierst, könnte es sein, dass diese nicht alle unter dem Index 1 laufen. Probiere das mal aus, zum Lernen gerne auch anderswo mit einfachen Bedingungen.
- danke auch dran, dass es an einem Tag zwei Feiertage geben kann. Schaue mal zu 2008. Hatte ich im Kalender im Original eigentlich auch so (>=1) formatiert.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#33
Vielen Dank für die Hilfe an alle!

Habe es hinbekommen!

Der Kalender kann jetzt Ferien, Urlaubstage, Feiertage, Brückentage und HEUTE() anzeigen.

Danke erstmal für den Hinweis mit dem Doppelten Feiertag.

Wusste ich garnicht, dass es sowas gibt.

Nur da habe ich garkeine Ahnung, wie ich das lösen soll.


Angehängte Dateien
.xlsm   Urlaubskalender_2025.xlsm (Größe: 80,7 KB / Downloads: 5)
Antworten Top
#34
Hallöchen,

jetzt enttäuschst Du mich aber Sad

1)

Du schreibst bei der einen Bedingung

=ZÄHLENWENN(Feiertage;G6)=1

Ich hatte Dir den Hinweis gegeben:

Hatte ich im Kalender im Original eigentlich auch so (>=1) formatiert.

2)

dann hast Du

=WENN(UND($AE$37="Ja";ZÄHLENWENN(Feiertage;G6)<>1);...

wobei zum einen mit <> 1 wohl die 0, also =0 gemeint sein soll, und zum anderen hab ich mir jetzt noch keine Gedanken gemacht, ob man diesen Teil der Prüfung ggf. z.B. durch die Reihenfolge der bedingten Formatierungen entfallen lassen kann.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#35
Irgendwie stehe ich jetzt absolut auf dem Schlauch.

Meine Formeln für die Feiertage:

=ZÄHLENWENN(Feiertage;G6)=1

=ZÄHLENWENN(Feiertage;G11)=1 (Bezieht sich auf alle Samstage)

So zeigt er den 1.5.2008 garnicht farblich an.
Antworten Top
#36
Moin!
Wenn =ZÄHLENWENN(Feiertage;G6) 2 ergibt, dürfte die Bedingung =ZÄHLENWENN(Feiertage;G6)=1 kaum erfüllt sein.
Isn't it?

Zusatz:
Es reicht übrigens, auf =ZÄHLENWENN(Feiertage;G6) [ohne Vergleich =1 oder >=1] zu prüfen!
Die bedingte Formatierung erwartet Wahrheitswerte.
Für Excel sind alle Zahlen <>0 WAHR.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#37
So funktioniert es!

=ODER(ZÄHLENWENN(Feiertage;G6)=1;ZÄHLENWENN(Feiertage;G6)=2)

Danke!


Angehängte Dateien
.xlsm   Urlaubskalender_2025.xlsm (Größe: 83,62 KB / Downloads: 0)
Antworten Top
#38
Irgendwie bist Du anstrengend!
Es reicht
=ZÄHLENWENN(Feiertage;G6)>=1
oder kürzer
=ZÄHLENWENN(Feiertage;G6)
Aber dazu müsste man die gegebenen Antworten auch mal lesen, ausprobieren und bestenfalls verstehen …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#39
Dass hatte ich versucht!

Nur bei beiden Varianten, werden alle Tage markiert, die kein gültiges Datum (leer sind) haben.
Antworten Top
#40
So, jetzt habe ich noch die Doppelte Feiertagssache eingebaut.

Sind zwei Feiertage an einem Tag, werden diese jetzt auch angezeigt.

Nochmals allen vielen Dank für Ihre Mithilfe/Unterstützung!


Angehängte Dateien
.xlsm   Urlaubskalender_2025.xlsm (Größe: 84,04 KB / Downloads: 5)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste