Normale" berekening isoweeknummer:
=1+INT(($A1-DATE(YEAR($A1+4-WEEKDAY($A1+6));1;5)+WEEKDAY(DATE(YEAR($A1+4-WEEKDAY($A1+6));1;3)))/7)
Liever iets korter:
De 1e dag van een week volgens ISO-norm:
in A1 : het jaar
in A2 : het nummer van de week
= Datum(A1;1;4)-weekdag(datum(A1;1;4);2)+1 +7*(A2-1)
3 weken later:
= Datum(A1;1;4)-weekdag(datum(A1;1;4);2)+1 +7*(3+A2-1)
4 januari valt volgens het ISO-systeem altijd in week 1.
de maandag van die 1e week bereken je door het weekdagnummer van 4 januari volgens het ISOsysteem (de eerste dag van de week is maandag) af te trekken en daarbij 1 op te tellen.
Wil je bijv. in week 10 uitkomen dan moet je bij week 1, 7*(10-1) dagen optellen; vandaar 7*(A2-1)
De werkbladformule voor het isoweeknummer is wat lastiger:
De eerste donderdag van het jaar valt altijd in week 1 van het jaar volgens de ISO-criteria.
Daaruit volgt dat je het weeknummer van een datum altijd kunt bepalen door te berekenen hoeveel weken er verstreken zijn tot de donderdag in de week waarin die datum valt.
Wil je van de datum in cel A1 het isoweeknummer bepalen dan kun je dat als volgt berekenen:
- bereken de donderdag in dezelfde week als d1
A1 -WEEKDAG(A1;2)+4
- bepaal in welk jaar die donderdag valt
JAAR(A1-WEEKDAG(A1;2)+4)
- bepaal 1 januari van het jaar waarin die donderdag valt
DATUM(JAAR(A1-WEEKDAG(A1;2)+4);1;1)
- bereken het verschil tussen de donderdag en 1 januari
A1-WEEKDAG(A1;2)+4-DATUM(JAAR(A1-WEEKDAG(A1;2)+4);1;1)
- bereken het aantal weken door dit verschil te delen door 7 en op een geheel getal af te ronden
=GEHEEL(....)/7)
- tel daar 1 bij op, omdat anders de eerste week het nummer 0 krijgt.
=(....) +1
Resultaat:
=GEHEEL((A1-WEEKDAG(A1;2)+4-DATUM(JAAR(A1-WEEKDAG(A1;2)+4);1;1))/7)+1
De werkbladfunktie en VBA-funktie voor de maandag van een bepaalde ISOweek verschillen niet in complexiteit.
Voor de berekening van het Isoweeknummer geef ik de voorkeur aan de VBA-funktie (in de vorm van een UDF).