Abstract
Wollen Sie herausfinden, ob ein Datum ein deutscher Feiertag ist? Oder ob es ein Feiertag in einem Bundesland ist?
Hier sind alle Feiertage von 2023 bis 2100 gezeigt. Sie können die Liste manuell ändern, z. B. Feiertage hinzufügen oder entfernen. Diese Liste kann mit dem unten angebotenen Programm Feiertage_generieren.xlsm automatisch erzeugt werden, wobei aber historische Feiertagsänderungen (z. B. Abschaffung des Buß- und Bettages seit 1995 mit Ausnahme Sachsens) und Gebietsreformen (z. B. Wiedervereinigung 1990) nicht berücksichtigt sind.
Für Schulferien (besser: schulfreie Tage) können die Feiertage einfach erweitert werden: Man fügt alle einzelnen Ferientage zu den entsprechenden Bundeslandspalten hinzu und benennt die benutzerdefinierte Funktion IstFeiertag um in IstSchulfreierTag.
Appendix – Programmcode IstFeiertag
Bitte den Haftungsausschluss im Impressum beachten.
Option Explicit
Enum Spalten
col_LBound = 0
col_DE 'Deutschland
col_BW 'Baden_Württemberg
col_BY 'Bayern
col_BYK 'Bayern (überw. kath.)
col_BE 'Berlin
col_BB 'Brandenburg
col_HB 'Bremen
col_HH 'Hamburg
col_HE 'Hessen
col_MV 'Mecklenburg-Vorpommern
col_NI 'Niedersachsen
col_NW 'Nordrhein-Westfalen
col_RP 'Rheinland-Pfalz
col_SL 'Saarland
col_SN 'Sachsen
col_SNK 'Sachsen (einig. kath.)
col_ST 'Sachsen-Anhalt
col_SH 'Schleswig-Holstein
col_TH 'Thüringen
col_THK 'Thüringen (einig. kath.)
col_AO 'Mein Arbeitsort
col_UBound
End Enum
Function IstFeiertag(dt As Date, _
Optional Land As String = "DE") As Variant
'Prüft, ob ein Datum ein Feiertag ist, mit Land = "DE"
'ob es ein bundeseinheitlicher Feiertag ist, sonst
'ob bundeseinheitlich oder vom entsprechenden Bundesland
'oder der individuelle "mein Arbeitsort".
'Source (DE): http://www.berndplumhoff.de/feiertag_de/
'(C) (P) by Bernd Plumhoff 18-Jan-2024 PB V0.2
Static Feiertage As Variant
Static LetzteZeile As Variant
Dim d As Date
Dim i As Long
Dim j As Long
Dim s As String
Dim ws As Worksheet
With Application.WorksheetFunction
If dt = 0# Or Land = "" Then
IstFeiertag = CVErr(xlErrNull)
Exit Function
End If
Set ws = Sheets("Feiertage")
If IsEmpty(Feiertage) Then
LetzteZeile = ws.Cells(2, 1).End(xlDown).Row
Set Feiertage = Range(ws.Cells(3, 1), _
ws.Cells(LetzteZeile, col_UBound - 1))
End If
i = 1
s = ws.Cells(2, i)
Do While s <> ""
If Land = s Then Exit Do
i = i + 1
s = ws.Cells(2, i)
Loop
If s = "" Then
IstFeiertag = CVErr(xlErrName)
Exit Function
End If
IstFeiertag = False
'Bundesweiter Feiertag?
j = 1
d = Feiertage(j, 1)
Do While j < LetzteZeile - 2
If dt = d Then
IstFeiertag = True
Exit Function
End If
j = j + 1
d = Feiertage(j, 1)
Loop
'Bundesland Feiertag?
If i > 1 Then
j = 1
d = Feiertage(j, i)
Do While j < LetzteZeile - 2
If dt = d Then
IstFeiertag = True
Exit Function
End If
j = j + 1
d = Feiertage(j, i)
Loop
End If
End With
End Function
Appendix – Programmcode Feiertagsliste_erstellen
Bitte den Haftungsausschluss im Impressum beachten.
Option Explicit
Const StartJahr = 2023
Const EndJahr = 2100
Enum Spalten
col_LBound = 0
col_DE 'Deutschland
col_BW 'Baden_Württemberg
col_BY 'Bayern
col_BYK 'Bayern (überw. kath.)
col_BE 'Berlin
col_BB 'Brandenburg
col_HB 'Bremen
col_HH 'Hamburg
col_HE 'Hessen
col_MV 'Mecklenburg-Vorpommern
col_NI 'Niedersachsen
col_NW 'Nordrhein-Westfalen
col_RP 'Rheinland-Pfalz
col_SL 'Saarland
col_SN 'Sachsen
col_SNK 'Sachsen (einig. kath.)
col_ST 'Sachsen-Anhalt
col_SH 'Schleswig-Holstein
col_TH 'Thüringen
col_THK 'Thüringen (einig. kath.)
col_AO 'Mein Arbeitsort
col_UBound
End Enum
Sub Feiertagsliste_erstellen()
'Generiert Feiertage für die Jahre StartJahr bis EndJahr.
'Source (DE): http://www.berndplumhoff.de/feiertag_de/
'(C) (P) by Bernd Plumhoff 18-Jan-2024 PB V0.2
Dim Advent4 As Date
Dim Easter As Date
Dim i As Long
Dim r(col_LBound + 1 To col_UBound - 1) As Long
Dim state As SystemState
Set state = New SystemState
wsGen.Range("3:100000").Delete
For i = col_LBound + 1 To col_UBound - 1
r(i) = 3
Next i
For i = StartJahr To EndJahr
Advent4 = DateSerial(i, 12, 25) - Weekday(DateSerial(i, 12, 25), 2)
Easter = EasterUSNO(i)
'Deutschland
wsGen.Cells(r(col_DE), col_DE) = DateSerial(i, 1, 1) 'Neujahr
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = Easter - 2 'Karfreitag
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = Easter + 1 'Ostermontag
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = DateSerial(i, 5, 1) 'Maifeiertag
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = Easter + 39 'Himmelfahrt
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = Easter + 50 'Pfingstmontag
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = DateSerial(i, 10, 3) 'Tag der deutschen Einheit
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = DateSerial(i, 12, 25) '1. Weihnachtstag
r(col_DE) = r(col_DE) + 1
wsGen.Cells(r(col_DE), col_DE) = DateSerial(i, 12, 26) '2. Weihnachtstag
r(col_DE) = r(col_DE) + 1
'Baden-Württemberg
wsGen.Cells(r(col_BW), col_BW) = DateSerial(i, 1, 6) 'Hl. Drei Könige
r(col_BW) = r(col_BW) + 1
wsGen.Cells(r(col_BW), col_BW) = Easter + 60 'Fronleichman
r(col_BW) = r(col_BW) + 1
wsGen.Cells(r(col_BW), col_BW) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_BW) = r(col_BW) + 1
'Bayern
wsGen.Cells(r(col_BY), col_BY) = DateSerial(i, 1, 6) 'Hl. Drei Könige
r(col_BY) = r(col_BY) + 1
wsGen.Cells(r(col_BY), col_BY) = Easter + 60 'Fronleichman
r(col_BY) = r(col_BY) + 1
wsGen.Cells(r(col_BY), col_BY) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_BY) = r(col_BY) + 1
'Bayern (überwiegend katholische Bevölkerung)
wsGen.Cells(r(col_BYK), col_BYK) = DateSerial(i, 1, 6) 'Hl. Drei Könige
r(col_BYK) = r(col_BYK) + 1
wsGen.Cells(r(col_BYK), col_BYK) = Easter + 60 'Fronleichman
r(col_BYK) = r(col_BYK) + 1
wsGen.Cells(r(col_BYK), col_BYK) = DateSerial(i, 8, 15) 'Mariä Himmelfahrt
r(col_BYK) = r(col_BYK) + 1
wsGen.Cells(r(col_BYK), col_BYK) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_BYK) = r(col_BYK) + 1
'Berlin
wsGen.Cells(r(col_BE), col_BE) = DateSerial(i, 3, 8) 'Int. Frauentag
r(col_BE) = r(col_BE) + 1
'Brandenburg
wsGen.Cells(r(col_BB), col_BB) = DateSerial(i, 10, 31) 'Reformationstag
r(col_BB) = r(col_BB) + 1
'Bremen
wsGen.Cells(r(col_HB), col_HB) = DateSerial(i, 10, 31) 'Reformationstag
r(col_HB) = r(col_HB) + 1
'Hamburg
wsGen.Cells(r(col_HH), col_HH) = DateSerial(i, 10, 31) 'Reformationstag
r(col_HH) = r(col_HH) + 1
'Hessen
wsGen.Cells(r(col_HE), col_HE) = Easter + 60 'Fronleichman
r(col_HE) = r(col_HE) + 1
'Mecklenburg-Vorpommern
wsGen.Cells(r(col_MV), col_MV) = DateSerial(i, 3, 8) 'Int. Frauentag
r(col_MV) = r(col_MV) + 1
wsGen.Cells(r(col_MV), col_MV) = DateSerial(i, 10, 31) 'Reformationstag
r(col_MV) = r(col_MV) + 1
'Niedersachsen
wsGen.Cells(r(col_NI), col_NI) = DateSerial(i, 10, 31) 'Reformationstag
r(col_NI) = r(col_NI) + 1
'Nordrhein-Westfalen
wsGen.Cells(r(col_NW), col_NW) = Easter + 60 'Fronleichman
r(col_NW) = r(col_NW) + 1
wsGen.Cells(r(col_NW), col_NW) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_NW) = r(col_NW) + 1
'Rheinland-Pfalz
wsGen.Cells(r(col_RP), col_RP) = Easter + 60 'Fronleichman
r(col_RP) = r(col_RP) + 1
wsGen.Cells(r(col_RP), col_RP) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_RP) = r(col_RP) + 1
'Saarland
wsGen.Cells(r(col_SL), col_SL) = Easter + 60 'Fronleichman
r(col_SL) = r(col_SL) + 1
wsGen.Cells(r(col_SL), col_SL) = DateSerial(i, 8, 15) 'Mariä Himmelfahrt
r(col_SL) = r(col_SL) + 1
wsGen.Cells(r(col_SL), col_SL) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_SL) = r(col_SL) + 1
'Sachsen
wsGen.Cells(r(col_SN), col_SN) = DateSerial(i, 10, 31) 'Reformationstag
r(col_SN) = r(col_SN) + 1
wsGen.Cells(r(col_SN), col_SN) = Advent4 - 32 'Buß- und Bettag
r(col_SN) = r(col_SN) + 1
'Sachsen (einige katholische Gemeinden)
wsGen.Cells(r(col_SNK), col_SNK) = Easter + 60 'Fronleichman
r(col_SNK) = r(col_SNK) + 1
wsGen.Cells(r(col_SNK), col_SNK) = DateSerial(i, 10, 31) 'Reformationstag
r(col_SNK) = r(col_SNK) + 1
wsGen.Cells(r(col_SNK), col_SNK) = Advent4 - 32 'Buß- und Bettag
r(col_SNK) = r(col_SNK) + 1
'Sachsen-Anhalt
wsGen.Cells(r(col_ST), col_ST) = DateSerial(i, 1, 6) 'Hl. Drei Könige
r(col_ST) = r(col_ST) + 1
'Schleswig-Holstein
wsGen.Cells(r(col_SH), col_SH) = DateSerial(i, 10, 31) 'Reformationstag
r(col_SH) = r(col_SH) + 1
'Thüringen
wsGen.Cells(r(col_TH), col_TH) = DateSerial(i, 9, 20) 'Weltkindertag
r(col_TH) = r(col_TH) + 1
wsGen.Cells(r(col_TH), col_TH) = DateSerial(i, 10, 31) 'Reformationstag
r(col_TH) = r(col_TH) + 1
'Thüringen (einige katholische Gemeinden)
wsGen.Cells(r(col_THK), col_THK) = Easter + 60 'Fronleichman
r(col_THK) = r(col_THK) + 1
wsGen.Cells(r(col_THK), col_THK) = DateSerial(i, 9, 20) 'Weltkindertag
r(col_THK) = r(col_THK) + 1
wsGen.Cells(r(col_THK), col_THK) = DateSerial(i, 10, 31) 'Reformationstag
r(col_THK) = r(col_THK) + 1
'Mein Arbeitsort (nehmen wir einmal an, Augsburg)
wsGen.Cells(r(col_AO), col_AO) = DateSerial(i, 1, 6) 'Hl. Drei Könige
r(col_AO) = r(col_AO) + 1
wsGen.Cells(r(col_AO), col_AO) = Easter + 60 'Fronleichman
r(col_AO) = r(col_AO) + 1
wsGen.Cells(r(col_AO), col_AO) = DateSerial(i, 8, 8) 'Hohes Friedensfest Augsburg
r(col_AO) = r(col_AO) + 1
wsGen.Cells(r(col_AO), col_AO) = DateSerial(i, 8, 15) 'Mariä Himmelfahrt
r(col_AO) = r(col_AO) + 1
wsGen.Cells(r(col_AO), col_AO) = DateSerial(i, 11, 1) 'Allerheiligen
r(col_AO) = r(col_AO) + 1
Next i
End Sub
Public Function EasterUSNO(YYYY As Long) As Long
'Source: http://www.cpearson.com/excel/easter.aspx
End Function
Download
Bitte den Haftungsausschluss im Impressum beachten.
Wenn Sie die Feiertage mit Excel einfach und praktisch mit der Funktion IstFeiertag nutzen wollen:
Feiertage.xlsm [53 KB Excel Datei, ohne jegliche Gewährleistung]
Wenn Sie die Feiertage selbst automatisch generieren wollen:
Feiertage_generieren.xlsm [91 KB Excel Datei, ohne jegliche Gewährleistung]