Menu Sluiten

Vakantiedagen bepalen met behulp van VBA

Functies vba excel macro

Met behulp van de onderstaande functie kun je voor elk jaar laten berekenen op welke datum een bepaalde vakantiedag valt. Deze functie heeft 2 input parameters. De eerste input parameter is het jaar waarin de vakantiedag valt. De 2e parameter is een getal van 1 tot 10 waarmee je de vakantiedag aangeeft waarvan je de datum wilt zien.

Public Function Vakantiedag(Inputjaar As Integer, VakantiedagNummer As Integer) As Date

    '##########################################opties
    '#### 1 = nieuwjaarsdag
    '#### 2 = goedevrijdag
    '#### 3 = paasMaandag
    '#### 4 = koningsdag
    '#### 5 = DagArbeid
    '#### 6 = bevrijdingsdag
    '#### 7 = hemelvaartsdag
    '#### 8 = pinksterMaandag
    '#### 9 = eerste kerstdag
    '#### 10 = tweede kerstdag
    '###########################################

    Dim goedevrijdag As Date
    Dim hemelvaartsdag As Date
    Dim paasMaandag As Date
    Dim pinksterMaandag As Date
    
    jaar = Inputjaar
    
    a = DateSerial(jaar, 4, 1) / 7
    If jaar Mod 19 = 0 Then
    b = 19
    End If
    c = (jaar Mod 19 + b) * 19 - 7
    d = (c Mod 30) / 7
    Pasen = Round(a + d, 0) * 7 - 6
    
    If VakantiedagNummer = 1 Then
        Vakantiedag = DateSerial(jaar, 1, 1)
    ElseIf VakantiedagNummer = 2 Then
        Vakantiedag = Pasen - 2
    ElseIf VakantiedagNummer = 3 Then
        Vakantiedag = Pasen + 1
    ElseIf VakantiedagNummer = 4 Then
        Vakantiedag = DateSerial(jaar, 4, 27)
    ElseIf VakantiedagNummer = 5 Then
        Vakantiedag = DateSerial(jaar, 5, 1)
    ElseIf VakantiedagNummer = 6 Then
        Vakantiedag = DateSerial(jaar, 5, 5)
    ElseIf VakantiedagNummer = 7 Then
        Vakantiedag = Pasen + 39
    ElseIf VakantiedagNummer = 8 Then
        Vakantiedag = Pasen + 50
    ElseIf VakantiedagNummer = 9 Then
        Vakantiedag = DateSerial(jaar, 12, 25)
    ElseIf VakantiedagNummer = 10 Then
        Vakantiedag = DateSerial(jaar, 12, 26)
    End If

End Function

Je kunt de bovenstaande functie op deze manier aanroepen:

datum = Vakantiedag(2022, 7)

In het bovenstaande voorbeeld zal de datum worden toegekend aan de variabele ‘datum’ waarop hemelvaartsdag is gevallen in het jaar 2022.

Door de bovenstaande functie iets aan te passen kun je hem ook gebruiken om te controleren of een bepaalde input datum een werkdag is ja of nee. Dit kan van pas komen indien je bijvoorbeeld in een werkomgeving bezig bent met het bepalen van deadlines (op basis van werkdagen) voor bepaalde processen.

De functie voor het controleren of een input datum een werkdag betreft ziet er als volgt uit:

Public Function werkdag(Inputdatum As Date) As String

    Dim goedevrijdag As Date
    Dim hemelvaartsdag As Date
    Dim paasMaandag As Date
    Dim pinksterMaandag As Date
    
    jaar = Year(Inputdatum)
    
    a = DateSerial(jaar, 4, 1) / 7
    If jaar Mod 19 = 0 Then
    b = 19
    End If
    c = (jaar Mod 19 + b) * 19 - 7
    d = (c Mod 30) / 7
    Pasen = Round(a + d, 0) * 7 - 6
    
    If Inputdatum = DateSerial(jaar, 1, 1) Then                      '#### 1 = nieuwjaarsdag
        werkdag = "nee"
    ElseIf Inputdatum = Pasen - 2 Then                               '#### 2 = goedevrijdag
        werkdag = "nee"
    ElseIf Inputdatum = Pasen + 1 Then                               '#### 3 = paasMaandag
        werkdag = "nee"
    ElseIf Inputdatum = DateSerial(jaar, 4, 27) Then                 '#### 4 = koningsdag
        werkdag = "nee"
    ElseIf Inputdatum = DateSerial(jaar, 5, 1) Then                  '#### 5 = DagArbeid
        werkdag = "nee"
    ElseIf Inputdatum = DateSerial(jaar, 5, 5) Then                  '#### 6 = bevrijdingsdag
        werkdag = "nee"
    ElseIf Inputdatum = Pasen + 39 Then                              '#### 7 = hemelvaartsdag
        werkdag = "nee"
    ElseIf Inputdatum = Pasen + 50 Then                              '#### 8 = pinksterMaandag
        werkdag = "nee"
    ElseIf Inputdatum = DateSerial(jaar, 12, 25) Then                '#### 9 = eerste kerstdag
        werkdag = "nee"
    ElseIf Inputdatum = DateSerial(jaar, 12, 26) Then                '#### 10 = tweede kerstdag
        werkdag = "nee"
    ElseIf Weekday(Inputdatum) = 7 Or Weekday(Inputdatum) = 1 Then   '#### als de dag v/d week zaterdag of zondag is dan is het ook geen werkdag
        werkdag = "nee"
    End If
    
    If werkdag <> "nee" Then
        werkdag = "ja"
    End If

End Function

Je kunt de bovenstaande functie op deze manier aanroepen:

WerkDagjaofnee = werkdag(CDate("25 - 12 - 2023"))

De uitkomst van de bovenstaande functie is “nee” omdat 25-12-2023 eerste kerstdag is. Dit is geen werkdag.

Heeft dit artikel je geholpen?

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *