Spill funktioniert nicht mit WOCHENTAG
#21
Hi Onur,

Zitat:Weil du bei INDEX die Spalte weggelassen hast.

Nein - das spielt überhaupt keine Rolle bei einem eindimensionalen INDEX. Völlig unverändert:

=LET(x;DATUM(2025;1;SEQUENZ(31));WT;WOCHENTAG(INDEX(x;1);2);y;ERWEITERN(x;ZEILEN(x)+3;INDEX(WT;1;1));y)
Antworten Top
#22
Hier meinte ich:
....WT;WOCHENTAG(INDEX(x;1;1);2);....

Und eine Spillformel (mit Sequenz) ist ja IMMER eine Arrayformel.
Antworten Top
#23
Zitat:...WT;WOCHENTAG(INDEX(x;1;1);2);....


Auch das ändert nix:

=LET(x;DATUM(2025;1;SEQUENZ(31));WT;WOCHENTAG(INDEX(x;1;1);2);y;ERWEITERN(x;ZEILEN(x)+3;INDEX(WT;1;1));y)
Antworten Top
#24
=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)
Antworten Top
#25
Zitat:=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)


Wird ja immer abstruser:

Mein (für mich logischer) Gedanke:

Ich erzeuge ein Array (mit SEQUENZ), weise dies einer Variablen (x) zu, die nicht mehr veränderlich ist. Dann lese ich aus dieser Variablen (die ja das Array enthält) den ersten Eintrag aus mit INDEX(x;1) und erwarte, dass diese Variable (WT) damit nur EINEN Wert enthält und nicht mehr veränderlich ist. Aber hier bin ich offensichtlich bereits auf dem Holzweg. Und genau das erschließt sich mir nicht - außer: Das ist ein mächtiger Bug.
Antworten Top
#26
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.
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 3 Nutzer sagen Danke an EA1950 für diesen Beitrag:
  • ws-53, {Boris}, BoskoBiati
Antworten Top
#27
Hi Anton,

super Erklärung - danke dafür! Xmas33

Zitat:Ob die Array-Variante ein Feature oder ein Bug ist, das wird nur Microsoft wissen.

Genau so ist es. Aber es ist gut zu wissen, was man halt beachten muss!
Antworten Top
#28
Als Nachtrag: Ich hatte das gestern (vor Antons Antwort) auch hier platziert:  Single value expected, but array delivered - Microsoft Q&A

Vielleicht ergibt sich daraus noch die Antwort auf "Feature oder Bug" Wink
[-] Folgende(r) 1 Nutzer sagt Danke an {Boris} für diesen Beitrag:
  • EA1950
Antworten Top
#29
Hi Anton und hi @ all,

ich habe es jetzt nochmal total simplifiziert:

=INDEX(SEQUENZ(5;1);1)

ergibt das Array ={1} und nicht =1 (ich habe extra bei SEQUENZ noch die Spaltenanzahl 1 mit angegeben).

Nur mit Angabe beider INDEX-Dimensionen wird ein einzelner Wert geliefert:

=INDEX(SEQUENZ(5;1);1;1)

Lagere ich SEQUENZ aber in A1 aus, dann liefert

=INDEX(A1#;1)

den einzelnen Wert =1 (und eben kein Array).

Das kann doch kein Feature sein?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste