Weekdagen en maanden

Voorbeeldbestanden bij dit artikel:
  • Weekdagen en maanden
  • Inleiding

    De poetshulp komt elke 2 weken op dinsdag langs. Welke datums zijn dat voor de komende 6 maanden ? Ander voorbeeldje: de laatste maandag van de elke derde maand ga ik een bloedafname laten doen. Welke datums zijn dat ? Geen evidente vragen. Net als de datum van de 4de zondag in juni. En zo kan je nog veel scenario's bedenken. Zou het niet handig zijn om dat in Excel te genereren ? Zeker, maar toen ik aan de oefening begon zat ik wel met de handen in het haar. Dit is nl. allesbehalve eenvoudig.

    Tot ik ontdekte dat de WEEKDAG functie een uiterst handig instrument is. Uiteraard kende ik WEEKDAG maar niet in al zijn facetten. WEEKDAG heeft als functie 2 argumenten:

    • de dag waarvan je de weekdag wil opvragen
    • de opzet van de weekdagen: op welke weekdag start de week ?

    Bestaande functies herbekijken

    Het resultaat dat je wil zien is m.a.w. ook afhankelijk van de opzet van de weekdagen: wij kennen weken waarbij maandag 1 geeft, dinsdag 2, ..., en zondag geeft 7. In andere contreien start men met 1 op zondag en eindigt men met 7 op zaterdag. Dit zijn situaties die de WEEKDAG functie moeiteloos aan kan. Meer nog, er zijn nog andere varianten:

    • een variante met 0 tot en met 6 ipv 1 tot en met 7
    • nog andere varianten met telkens een andere begindag in de week: getallen 1 tot en met 7 staan voor maandag tot en met zondag, of van dinsdag tot en met maandag (erop), of van woensdag tot en met dinsdag (erop), of [vul zelf aan], of van zaterdag tot en met zondag.

    Dit leidt ons tot de gevolgtrekking dat we relatief eenvoudig een sequentie 1, 2, 3, ..., 7 kunnen genereren voor elke mogelijke startdag van de week. Anders gezegd, eender welke dag in de week kan elk van de 7 getallen toegewezen krijgen, afhankelijk van de gekozen sequentie.

    Deze notie was nieuw voor mij en pas ik hieronder toe om te komen tot bijvoorbeeld de laatste maandag van de maand.

    Hoe kom je tot de laatste maandag van de maand ? Je berekent eerst de laatste dag van de maand en je kijkt welke weekdag dat is. Vervolgens trek je een aantal dagen er weer van af. Als de laatste dag reeds een maandag is, dan trek je niets af, anders een getal van 1 tot en met 6:

    Doen we de oefening niet enkel voor de gewenste laatste maandag, maar voor elke gewenste weekdag, dan krijgen we als getal dat we moeten aftrekken een tabel: in de rijen staat de weekdag van de laatste dag van de maand, in de kolommen staat de weekdag die we wensen.

    We zien getallen van 0 tot en met 6. Nu is handig om in elke cel 1 op te tellen:

    Waarom ? Omdat de sequenties 1 tot en met 7 gevonden kunnen worden door middel van de WEEKDAG functie ! Zo is de WEEKDAG van vandaag, maandag 24 juni 2019:

    • 2, als het tweede argument in de WEEKDAG functie een 1 is (of leeg)
    • 1, als het tweede argument in de WEEKDAG functie een 2 is
    • 0, als het tweede argument in de WEEKDAG functie een 3 is
    De waarde 1 voor maandag, wat de eerste weekdag is ons systeem, is ons wel bekend.

    Vervolgens heb je nog 7 andere varianten, afhankelijk van hoe de week begint:

    • 1, als het tweede argument in de WEEKDAG functie een 11 is (ma-zo)
    • 7, als het tweede argument in de WEEKDAG functie een 12 is (di-ma)
    • 6, als het tweede argument in de WEEKDAG functie een 13 is (wo-di)
    • 5, als het tweede argument in de WEEKDAG functie een 14 is (do-wo)
    • 4, als het tweede argument in de WEEKDAG functie een 15 is (vr-do)
    • 3, als het tweede argument in de WEEKDAG functie een 16 is (za-vr)
    • 2, als het tweede argument in de WEEKDAG functie een 17 is (zo-za)

    Daar heb je het. We gebruiken de waarden 11 tot en met 17 naargelang de keuzes (inputvariabelen): kijk gerust in het bijgevoegde Excel bestand naar de formule. De 11 tot en met 17 worden eigenlijk gevonden als "10 + de gewenste weekdag". En het is dat wat je toepast op de weekdag van laatste dag van de maand. Geen eenvoudige uitleg, maar ik denk dat je met behulp van de afbeeldingen van de tabellen hierboven wel kan volgen wat het patroon is.

    Het Excel bestand bevat nog meer leuks in de tabel:

    • Kolom A: een oplopend rijnummer
    • Kolom B: de eerste dag van de maand (ongeacht welke weekdag het is)
    • Kolom C: de laatste dag van de maand (ongeacht welke weekdag het is)
    • Kolom D: het maandnummer
    • Kolom E: het jaar
    • Kolom F: wanneer de gekozen dag voor de eerste keer voorkomt in de maand: gekozen wil zeggen cel P3 - Ma/Di/Wo/Do/Vr/Za/Zo
    • Kolom G: wanneer de gekozen dag voor de x-de keer (zie cel P5) voorkomt in de maand
    • Kolom H: wanneer de gekozen dag voor de laatste keer voorkomt in de maand
    • Kolom I: wanneer de gekozen dag voor de eerste keer voorkomt in de maand
    • Kolom J: wanneer de gekozen dag voor de tweede keer voorkomt in de maand
    • Kolom K: wanneer de gekozen dag voor de derde keer voorkomt in de maand
    • Kolom L: wanneer de gekozen dag voor de vierde keer voorkomt in de maand
    • Kolom M: wanneer de gekozen dag voor de vijfde keer voorkomt in de maand - gesteld dat dat kan

    Voor de volledigheid vermeld ik nog dat Microsoft Outlook zulke terugkerende events/datums eigenlijk goed genereert. Het is dat stukje functionaliteit dat ik wilde nabouwen in Excel.

    Veel plezier ermee en houd het hoofd koel in deze tropische temperaturen :-)




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links