Hallo Boris,
PHP-Code:
=LET(x;DATUM(2025;1;SEQUENZ(31));WT;WOCHENTAG(INDEX(x;1);2);y;ERWEITERN(x;ZEILEN(x)+WT;1;0);y)
das Problem liegt hauptsächlich darin, wie die Funktion
ERWEITERN(x; ZEILEN(x)+WT; 1; 0) auf ihre 4 Parameter reagiert.
Die Funktion erwartet beim
1. Parameter (hier die x-Variable) einen Array-Parameter.
Die Funktion erwartet beim
2. und 3. Parameter einen
skalaren (Zahlen)wert. So ist es auch in der Microsoft-Hilfe-Dokumentation beschrieben.
Also liefert die Formel
... ERWEITERN(x; ZEILEN(x)+3; 1; 0) ein Array, das um 3 Array-Elemente mehr enthält, wobei die 3 zusätzlichen Elemente mit 0 befüllt werden. Das ist völlig konform mit der vorgenannter Microsoft-Dokumentation.
Was passiert aber, wenn man folgende Variante einsetzt:
... ERWEITERN(x; ZEILEN(x)+{3}; 1; 0) Dabei enthält der 2. Parameter das 1x1-Array {3}. Zu diesem wird die Zeilenanzahl des x-Vektors addiert, sodass sich danach wiederum ein 1x1-Array {ZeilenVon(x)+3} ergibt.
Was nicht in der Microsoft-Dokumentation steht, ist, was passiert, wenn der 2. (bzw. 3.) Parameter kein skalarer Zahlenwert ist, sondern ein Array, das (einen) Zahlenwert(e) enthält. Die Funktion produziert dann plötzlich ein Array aus dem 1. Element von x, aber mit den Dimensionen des 2. Parameters - im vorgenannten Fall ein 1x1-Array. Füttert man die Funktion so:
... ERWEITERN(x; ZEILEN(x)+{3.2;5.6;9.1}; 1; 0) erhält man ein 3x2-Array mit dem 1.Wert aus der x-Variable.
Macht man jedoch Folgendes:
... WT;WOCHENTAG(INDEX(x;1);2); ERWEITERN(x;ZEILEN(x)+WT;1;0), so bewirkt die INDEX-Funktion, dass sie an die WOCHENTAG-Funktion ein
1x1-Array übergibt, woraufhin die WOCHENTAG-Funktion die Variable WT mit einem
1x1-Array befüllt mit dem Wert 3 als Inhalt. Somit wird schlussendlich im 2. Parameter der ERWEITERN-Funktion auch wieder ein 1x1-Array erzeugt, was schließlich zum oben geschilderten Resultat eines 1x1-Arrays aus dem 1.Element von x führt.
Macht man jedoch Folgendes:
... WT;WOCHENTAG(INDEX(x;1);2); ERWEITERN(x;ZEILEN(x)+@WT;1;0), so zwingt man Excel, nicht die WT-Variable zu betrachten (die ein 1x1-Array wäre), sondern ihren Inhalt, wobei in diesem Fall der Inhalt die skalare Zahl 3 ist. Die Funktion ERWEITERN reagiert damit wieder erwartungsgemäß lt. Dokumentation. Man könnte genauso gut schreiben:
... ERWEITERN(x;ZEILEN(x)+@{3};1;0) Die vorgenannten Einsichten habe ich gewinnen können, weil ich mir das
Microsoft-Add-In "Excel-Labs" installiert habe, das ebenfalls einen Formel-Debugger enthält, der zwar etwas gewöhnungsbedürftig ist, aber klar und deutlich die geschilderten Array-Tücken der Excel-Arithmetik darstellte.
Vielleicht hilft dir das etwas weiter. Ob die Array-Variante ein Feature oder ein Bug ist, das wird nur Microsoft wissen.
=LET(x;DATUM(2025;1;SEQUENZ(31));wtt;3;WT;WOCHENTAG(INDEX(x;1;1);2);y;ERWEITERN(x;ZEILEN(x)+WT;1;0);y)Diese Variante liefert wieder das erwartete erweiterte Array zurück, weil INDEX(x;1;1) einen skalaren Wert ergibt. Lässt man den 3.Parameter weg (INDEX(x;1)), so hat man in diesem Fall ein 1x1-Array und die Funktion ERWEITERN benimmt sich undokumentiert.