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.