AW: Makro in Wenn-Funktion
04.04.2006 17:08:26
UweD
Hallo
so gehts. Die Zellen müssen aber vorher schon verbunden sein.
|
|
| A | B | C | D | E | 1 | 01.04.2006 | | | Feiertag |
---|
2 | 02.04.2006 | | | | | 3 | 03.04.2006 | | | | | 4 | 04.04.2006 | | | | | 5 | 05.04.2006 | | | | | 6 | 06.04.2006 | | | | | 7 | 07.04.2006 | | | | | 8 | 08.04.2006 | | | | | 9 | 09.04.2006 | | | | | 10 | 10.04.2006 | | | | | 11 | 11.04.2006 | | | | | 12 | 12.04.2006 | | | | | 13 | 13.04.2006 | | | | | 14 | 14.04.2006 | Karfreitag | | | | 15 | 15.04.2006 | | | | | 16 | 16.04.2006 | Ostersonntag | | | | 17 | 17.04.2006 | Ostermontag | | | | 18 | 18.04.2006 | | | | | 19 | 19.04.2006 | | | | | 20 | 20.04.2006 | | | | | 21 | 21.04.2006 | | | | | 22 | 22.04.2006 | | | | | 23 | 23.04.2006 | | | | | 24 | 24.04.2006 | | | | | 25 | 25.04.2006 | | | | | 26 | 26.04.2006 | | | | | 27 | 27.04.2006 | | | | | 28 | 28.04.2006 | | | | | 29 | 29.04.2006 | | | | | 30 | 30.04.2006 | | | | | Formeln der Tabelle | B1 : =FeierTag(A1;0)
D1 : =WENN(ZÄHLENWENN(B:B;">""")>1;"Feiertag";"")
|
Bedingte Formatierungen der Tabelle | Zelle | Nr.: / Bedingung | Format | D1 | 1. / Formel ist =ZÄHLENWENN(B:B;">""")>1 | Abc |
|
|
|
Wie du siehst, ermittel ich die Feiertage per Formel (geht aber auch so wie du es machst)
Wenn es dich interessiert, hier die benutzerdefinierte Funktion.
Public Function FeierTag(Datum As Date, N As Boolean) As String
Dim Jahr As Integer
Jahr = Year(Datum)
If (Jahr > 1904) And (Jahr < 2100) Then
Select Case Format$(Datum, "dd.mm")
' Gesetzliche Feiertage
Case "01.01": FeierTag = "Neujahr"
Case "06.01": FeierTag = "Heilige Drei Könige"
Case "01.05": FeierTag = "Tag der Arbeit"
Case "15.08": FeierTag = "Mariä Himmelfahrt"
Case "03.10": FeierTag = "Tag der Deutschen Einheit"
Case "31.10": FeierTag = "Reformationstag"
Case "01.11": FeierTag = "Allerheiligen"
Case "24.12": FeierTag = "Heiligabend"
Case "25.12": FeierTag = "1. Weihnachtsfeiertag"
Case "26.12": FeierTag = "2. Weihnachtsfeiertag"
Case "31.12": FeierTag = "Sylvester"
Case Else
' Bewegliche Feste:
Select Case Datum - OsterSonntag(Datum)
Case -52: FeierTag = "Weiberfastnacht"
Case -48: FeierTag = "Rosenmontag"
Case -2: FeierTag = "Karfreitag"
Case 0: FeierTag = "Ostersonntag"
Case 1: FeierTag = "Ostermontag"
Case 39: FeierTag = "Christi Himmelfahrt"
Case 49: FeierTag = "Pfingstsonntag"
Case 50: FeierTag = "Pfingstmontag"
Case 60: FeierTag = "Fronleichnam"
Case Else
If Datum = CDate("25.12." & Jahr) - Weekday("25.12." & Jahr, _
vbMonday) - 32 Then
FeierTag = "Buß- und Bettag"
Else
If N = True Then
FeierTag = "gewöhnlicher " & Format$(Datum, "DDDD") ' Kein Feiertag
ElseIf N = False Then
FeierTag = vbNullString ' Kein Feiertag
End If
End If
End Select
End Select
Else: FeierTag = vbNullString
End If
End Function
Public Function OsterSonntag(Datum As Date) As Date
Dim A As Integer, D As Integer, E As Integer, Jahr As Integer
Jahr = Year(Datum)
If (1904 < Jahr) And (Jahr < 2100) Then ' Datum zulässig ?
A = Jahr Mod 19
D = (19 * A + 24) Mod 30
E = (2 * (Jahr Mod 4) + 4 * (Jahr Mod 7) + 6 * D + 5) Mod 7
OsterSonntag = CDate(DateSerial(Jahr, 3, 22 + D + E))
If Month(OsterSonntag) = 4 Then
If Day(OsterSonntag) = 26 Or (Day(OsterSonntag) = 25 And E = 6 And A > 10) Then
OsterSonntag = OsterSonntag - 7
End If
End If
End If
End Function
wird in ein Modul geschrieben und so wie oben beschrieben benutzt
Gruß UweD
(Rückmeldung wäre schön)