Folgende Formel hab' ich vor Jahren mal geschrieben - und siehe da, sie funktioniert noch ;-)
Vorab noch was zum "Nur berechnen mit gültigem Datum". In meiner Formel setze ich das Datum auf @Today, falls nicht vorhanden (was auch immer damals der Kontext gewesen sein mag), aber man kann das auch besser machen, in dem man im Fall der Fälle die Berechnung einfach abbricht:
@If (!@IsTime (Datum); @Return (""); "");
Es kann aber auch erforderlich sein, daß man den "Kein-Datum-Zustand" zurückgeben muß und einen Default-Wert für die KW zurückgibt (0 oder leer oder ...)
Servus,
Bernhard
REM "1. Keine Berechnung ohne Datum! 2. Ist der 1.1. des geforderten Jahres kleiner als Freitag -> 1. KW beginnt u.U. im Vorjahr! 3. Sonst Wochentagnr. (So =1; Mo = 2, ...) vom 1.1. abziehen (-> letzter Sa.), Addition von 9 führt zum ersten Montag im Jahr)";
REM "Zunächst Berechnung des Starttags des aktuellen Jahres:";
StartTagAktJ:=@If(
@Weekday(@Date(@Year(Datum); 1; 1)) > 5;
@Adjust(@Date(@Year(Datum); 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum); 1; 1)) + 9; 0; 0; 0);
@Adjust(@Date(@Year(Datum); 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum); 1; 1)) + 2; 0; 0; 0));
REM "Jetzt Berechnung des Starttags des Vorjahres:";
StartTagVJ:=@If(
@Weekday(@Date(@Year(Datum) - 1; 1; 1)) > 5;
@Adjust(@Date(@Year(Datum) - 1; 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum) - 1; 1; 1)) + 9; 0; 0; 0);
@Adjust(@Date(@Year(Datum) - 1; 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum) - 1; 1; 1)) + 2; 0; 0; 0));
REM "Und jetzt noch die Berechnung des Starttags des Folgejahres:";
StartTagFJ:=@If(
@Weekday(@Date(@Year(Datum) + 1; 1; 1)) > 5;
@Adjust(@Date(@Year(Datum) + 1; 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum) + 1; 1; 1)) + 9; 0; 0; 0);
@Adjust(@Date(@Year(Datum) + 1; 1; 1); 0; 0; -@Weekday(@Date(@Year(Datum) + 1; 1; 1)) + 2; 0; 0; 0));
StartTagKW1:=@If(
Datum >= StartTagFJ; StartTagFJ;
Datum < StartTagAktJ; StartTagVJ;
StartTagAktJ);
@Integer((Datum - StartTagKW1) / 86400 / 7) + 1