Ist ein Tag Feiertag?

13/12/2007 - 14:33 von Stefan Anderl | Report spam
Hallo Kollegen, im folgenden drei Funktionen, mit deren Hilfe die Feiertage
eines beliebigen Jahres bestimmt werden können.

1) Die Funktion ostersonntag(jahreszahl) ermittelt zu einer übergebenen
Jahreszahl das Datum des Ostersonntags.

2) Die Funktion feiertag(datum) gibt zurück, ob das übergebene Datum ein
Feiertag ist oder nicht.

3) Die Subroutine alle_feiertage(jahreszahl) listet zu dem übergebenen Jahr
alle Feiertage (im Direktfenster) auf, einschließlich dem Wochentag (Sonntag
ist 0, Montag ist 1 usw...)

Alle Angaben gelten für das Bundesland NRW, in anderen Bundeslàndern die
Funktion feiertag() erweitert werden, wenn es mehr Feiertage gibt!


Function ostersonntag(jahreszahl As Long) As Date
Dim maerker1, maerker2, maerker3, maerker4, maerker5, maerker6, zr7 As Long
maerker1 = jahreszahl Mod 19 + 1
maerker2 = Fix(jahreszahl / 100) + 1
maerker3 = Fix(3 * maerker2 / 4) - 12
maerker4 = Fix((8 * maerker2 + 5) / 25) - 5
maerker5 = Fix(5 * jahreszahl / 4) - maerker3 - 10
maerker6 = (11 * maerker1 + 20 + maerker4 - maerker3) Mod 30
If (maerker6 = 25 And maerker1 > 11) Or maerker6 = 24 Then maerker6 =
maerker6 + 1
zr7 = 44 - maerker6
If zr7 < 21 Then zr7 = zr7 + 30
zr7 = zr7 + 7
zr7 = zr7 - (maerker5 + zr7) Mod 7
If zr7 <= 31 Then
ostersonntag = CDate(CStr(zr7) & ". 3. " & CStr(jahreszahl))
Else
ostersonntag = CDate(CStr(zr7 - 31) & ". 4. " & CStr(jahreszahl))
End If
End Function
Function feiertag(Tagesdatum As Date) As Boolean

feiertag = False

If Day(Tagesdatum) = 1 And Month(Tagesdatum) = 1 Then feiertag = True
'Neujahr

If Day(Tagesdatum) = 1 And Month(Tagesdatum) = 5 Then feiertag = True
'1. Mai

If Day(Tagesdatum) = 3 And Month(Tagesdatum) = 10 Then feiertag = True
'Tag der deutschen Einheit

If Day(Tagesdatum) = 1 And Month(Tagesdatum) = 11 Then feiertag = True
'Allerheiligen


If Day(Tagesdatum) = 25 And Month(Tagesdatum) = 12 Then feiertag = True
'1. Weihnachtstag


If Day(Tagesdatum) = 26 And Month(Tagesdatum) = 12 Then feiertag = True
'2. Weihnachtstag

If Tagesdatum - ostersonntag(Year(Tagesdatum)) = -2 Then feiertag = True
'Karfreitag

If Tagesdatum - ostersonntag(Year(Tagesdatum)) = 1 Then feiertag = True
'Ostermontag

If Tagesdatum - ostersonntag(Year(Tagesdatum)) = 39 Then feiertag = True
'Christi Himmmelfahrt

If Tagesdatum - ostersonntag(Year(Tagesdatum)) = 50 Then feiertag = True
'Pfingstmontag

If Tagesdatum - ostersonntag(Year(Tagesdatum)) = 60 Then feiertag = True
'Fronleichnam

End Function

Sub alle_feiertage(jahr As Long)
Dim tag As Date
tag = DateSerial(jahr, 1, 1)
Do While tag <= DateSerial(jahr, 12, 31)
If feiertag(tag) Then Debug.Print tag; " ";
Application.WorksheetFunction.Weekday(tag, 2)
tag = tag + 1
Loop
End Sub
 

Lesen sie die antworten

#1 Alexander Wolff
13/12/2007 - 15:10 | Warnen spam
www.xxcl.de/0016.htm enthàlt die Feiertage auch formelseitig - bzw.
unterdrückt sie.
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2

Ähnliche fragen