Abstract

Wollen Sie herausfinden, ob ein Datum ein deutscher Feiertag ist? Oder ob es ein Feiertag in einem Bundesland ist?

feiertage

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 jedoch auch mit dem unten angebotenen Programm Feiertage_generieren.xlsm automatisch erzeugt werden, wobei jedoch 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 (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.bplumhoff.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.bplumhoff.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 [51 KB Excel Datei, ohne jegliche Gewährleistung]

Wenn Sie die Feiertage selbst automatisch generieren wollen:

Feiertage_generieren.xlsm [86 KB Excel Datei, ohne jegliche Gewährleistung]