AW: Bei Feiertag keine Schicht
09.12.2005 10:44:14
UweD
Hallo
Bei dir ist nur die Osterformel eingebaut.
Ich hab hier eine Funktion, die daraus auch die Feiertage ermittelt.
Ergänze / Tausche das Makro im Modul Feiertage..
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
In der Zelle N12 diese geänderte Formel. (dann weiterkopieren)
|
|
Formeln der Tabelle | N13 : =WENN(D272="Urlaub";"";WENN(D272="Krank";"";WENN(Feiertage.FeierTag(N12;0)<>"";"";WENN(WOCHENTAG(N12;2)<5;8;WENN(WOCHENTAG(N12;2)=5;6;"")))))
|
|
|
Gruß UweD
(Rückmeldung wäre schön)