Wat gaat er fout?
<knip>
Door de (year(now) word er toch gekeken naar het huidige jaar, dus hoe kan de uitkomst dan 2018 zijn?
wat er fout gaat zijn een paar dingen..
Jij doet een verkeerde aanname en er is in die formule wat teveel gerommeld met zowel de -4 aan het eind en -2 in de DATE() functie
de aanname de NOW() formule zorgt inderdaad dat het jaar uitkomt op 2019 maar als je er maar genoeg dagen vanaf trekt kom je vanzelf in 2018 terecht. Als jij (zoals later gesteld) een 1 in A3 zet dan is dat snel gebeurd door die extra aftrek van -2 -4 dagen en ook nog het weekday getal
even in stappen worden de volgende berekeningen gedaan
=DATE(YEAR(NOW()), 1, -2)
geeft als uitkomst 29-12-2018
binnen de DATE functie kun je gewoon met negatieve getallen werken dan telt hij gewoon dagen terug, zelfs 0 werkt dan geeft ie laatste dag van vorige maand, daarom leid -2 tot 29-12-2018
-WEEKDAY(DATE(YEAR(NOW()), 1, 3))
leidt tot de datum 3 januari 2019 en dat viel op een donderdag
binnen de standaard
WEEKDAY() formule is zondag dag 1 en donderdag daarmee dag 5.
dat maakt 29/12/2018 - 5 = 24/12/2018
+ R[1]C[-8] * 7-4
in A3 stond 1 is de aanname
1*7-4 = 3
24/12/2018 + 3 = 27/12/2018
als A3 leeg is zoals in jou voorbeeldbestand dan krijg je dus 0*7-4 = -4 en dan kom je zelfs op 20/12/2018 uit.
dat is dus antwoord op je vraag waarom met de NOW formule er toch een eerder jaar uit kan komen.
Nu blijft eigenlijk de vraag van sylvester-ponte over.
welke datum had je willen zien? als in A3 een 1 voor weeknummer is ingevuld,
mijn gok is dat je de maandag van elke week wilt zien.
in dat geval moet je de formule aanpassen naar
Code:
'Formule datum
Range("I2") = "=DATE(YEAR(NOW()), 1, -2) - WEEKDAY(DATE(YEAR(NOW()), 1, 3),[COLOR="#0000CD"]11[/COLOR]) + R[1]C[-8] * 7"
dus
1. de -4 op het eind moet eraf
2. in de weekday formule moet je [return_type] 2 of 11 invullen om maandag dag 1 van elke week te maken.
ik heb 11 gebruikt omdat dit de vervolg logica beter uitlegt. bovenstaande formule kan elke gewenste dag als eerste dag van de week aanduiden enige wat je hoeft te doen is die 11 aan te passen naar 12 tm 17 voor dinsdag tm zondag dus 12= dinsdag en 17= zondag
De logica achter deze formule is.
Omdat aan het eind van de formule het weeknummer wordt vermenigvuldigd met 7 moet dus om bij week 1 op de juiste datum te komen het eerste deel van de formule een week eerder liggen.
Daar komt de -2 in DATE om de hoek kijken. want week een start op zijn laatst op 4 januari trek daar 7 dagen vanaf en je zit op 29-12, maar omdat in de DATE formule DATE(2019,1,0) wordt gezien als 31-12-2018 trek je dus -2 af om op 29-12 uit te komen. maar 29-12 is niet altijd een maandag en om dus bij de dichtsbijzijnde maandag vor 29-12 te komen doe je de berekening met WEEKDAY() die trekt nog het benodigd aantal dagen af om precies 7 dagen voor de feitelijk benodigde maandag te komen.
Ik hoop dat je er met deze voorbeeld berekening en uitleg uitkomt.
zie ook bijlage voor wat berekeningsvoorbeelden.