SEQUENZ verweigert Spillen in LET
#1
An alle LET() Freaks,

In Zelle B1 ist ein ZellDropDown mit Jahreszahlen (echte Zahlen).
In Zelle B1 ist ein ZellDropDown: 1. Quartal;2. Quartal; 3. Quartal;4. Quartal;1. Halbjahr;2. Halbjahr;Jahr

In Zelle B6 die Formel: 
Code:
=LET(
xLi;LINKS(B2;4);
xQtr;{"1. Q";"2. Q";"3.
Q";"4. Q";"1. H";"2. H";"Jahr"};
xNr;XVERGLEICH(xLi;xQtr);
xA;WENNS(xNr=1;DATUM(B1;1;1);xNr=2;DATUM(B1;4;1);xNr=3;DATUM(B1;7;1);xNr=4;DATUM(B1;10;1);xNr=5;DATUM(B1;1;1);xNr=6;DATUM(B1;7;1);xNr=7;DATUM(B1;1;1));
xE;WENNS(xNr=1;DATUM(B1;3;31);xNr=2;DATUM(B1;6;30);xNr=3;DATUM(B1;9;30);xNr=4;DATUM(B1;12;31);xNr=5;DATUM(B1;6;30);xNr=6;DATUM(B1;12;31);xNr=7;DATUM(B1;12;31));
xDb;SEQUENZ(1;xE-xA+1;xA;1);
VSTAPELN(xDb;xDb))
Diese Formel funktioniert korrekt und spillt so wie es sein soll, ist aber durch WENNS() etwas weniger Performant.

Diese Formel:
Code:
=LET(
xLi;LINKS(B2;4);
xQtr;{"1. Q";"2. Q";"3. Q";"4. Q";"1. H";"2. H";"Jahr"};
xNr;XVERGLEICH(xLi;xQtr);
xA;{1;4;7;10;1;7;1};
xE;{3;6;9;12;6;12;12};
xS;DATUM(B1;INDEX(xA; xNr;);1);
xL;MONATSENDE(DATUM(B1;INDEX(xE; xNr;);1);0);
xDb;SEQUENZ(1;xL-xS+1;xS;1);
VSTAPELN(xDb;xDb))
Übergibt den Variablen alles korrekt, aber dann weigert sich SEQUENZ() zu spillen.

Ich vermute mal, da läuft was in der Engine nicht so wie es sein soll. 
Hat da jemand eine Idee warum trotz korrekter Vorgehensweise SEQUENZ nicht spillt.

Gruß Uwe


Angehängte Dateien
.xlsx   Testdatei mit Spill Problem.xlsx (Größe: 12,88 KB / Downloads: 9)
Antworten Top
#2
Hallo Uwe,

es gibt einige neue Funktionen, die nicht so ohne Weiteres spillen. Sequenz gehört wohl dazu. Ich habe es noch nicht so ganz verstanden, aber es hängt wohl damit zusammen, dass mit xS und xL Arrays erzeugt werden, mit denen SEQUENZ nicht umgehen kann (s. Formelauswertung). 
So geht´s:

Code:
=LET(
xNr;XVERGLEICH(B2;Tabelle1!$A$1:$A$7);
xA;{1;4;7;10;1;7;1};
xE;{3;6;9;12;6;12;12};
xS;@DATUM(B1;INDEX(xA;xNr;);1);
xL;@MONATSENDE(DATUM(B1;INDEX(xE;xNr;);1);0)+1;
xDb;SEQUENZ(;xL-xS;xS;1);xDb)

Ich habe allerdings die Liste, die Du in der Datenüberprüfung hinterlegt hast, als Liste in eine Tabelle gepackt, macht das Ganze etwas einfacher.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallo Edgar,
 
xS und xL enthalten ja nur die Datumszahl (Zelle B9 und B10). 
Es sei denn, dass selbst bei einer Zahl die beiden Variablen schon ein eindimensionales Array mit nur einem Wert in die Variablen erzeugen??
 
In VBA passiert das ja mit as Variant und undeklariert ist Variant Standardvorgabe.
 
Eine Sache passt aber da trotzdem nicht so recht zusammen. Verarbeitet werden in SEQUENZ() (Datums)Zahlen. In der funktionierenden Formel werden letztendlich auch immer nur wieder dieselben Datumszahlen erzeugt und in SEQUENZ übergeben. 
 
Gruß Uwe
Antworten Top
#4
Hallo Uwe,

deswegen mein Hinweis auf die Formelauswertung. xL und xS liegen als Array vor, @ macht daraus Zahlen.

   
   
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo Edgar,

alles klar. Jetzt hab ich es auch gesehen, auch wenn man bei dem Guckloch von Fenster fast schon die Lupe nehmen muss.

So funktionierts:
Code:
=LET(
xLi;LINKS(B2;4);
xQtr;{"1. Q";"2. Q";"3. Q";"4. Q";"1. H";"2. H";"Jahr"};
xNr;XVERGLEICH(xLi;xQtr);
xA;{1;4;7;10;1;7;1};
xE;{3;6;9;12;6;12;12};
xS; INDEX(DATUM(B1; INDEX(xA; xNr); 1); 1);
xL; INDEX(MONATSENDE(DATUM(B1; INDEX(xE; xNr); 1); 0); 1);
xDb;SEQUENZ(1;xL-xS+1;xS;1);
VSTAPELN(xDb;xDb))
Danke für den Hinweis.


Gruß Uwe
Antworten Top
#6
Hallo,

kleiner Nachtrag zu dem Problem:

https://www.clever-excel-forum.de/Thread...ILE-vs-MAP
https://www.clever-excel-forum.de/Thread...-WOCHENTAG
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#7
Hallo Edgar, 
 
den Klammeraffen hatte ich überlesen (Bildchen angeschaut und Formelauswertung heimgesucht). Ich habe es eben noch schnell getestet nachdem ich mir die beiden Threads nebst Erläuterungen angesehen hatte. 
 
Die Performance ist bei der einfachen Ausgabe so ziemlich gleich. Ein Tempovorteil wird wohl erst bei vielfachem Durchlauf auffällig werden. 
Sichtbarer/lesbarer Vorteil ist der Wegfall der Index Verschachtelung. 
In dem Anwendungsfall reicht allerdings @, da es immer nur um Einzelwerte geht.
 
Danke und schönes Wochenende.
 
Gruß Uwe
Antworten Top
#8
Hallo Edgar und Uwe,

Zitat:Sequenz gehört wohl dazu. Ich habe es noch nicht so ganz verstanden, aber es hängt wohl damit zusammen, dass mit xS und xL Arrays erzeugt werden, mit denen SEQUENZ nicht umgehen kann (s. Formelauswertung). 
ich habe mir das Ganze im Formel-Debugger von Microsoft angeschaut (Add-In "Excel-Labs").

Der springende Punkt ist, dass SEQUENZ(Zeilen;Spalten;Start;Schritt) in allen 4 Parametern stets Zahlen erwartet - niemals jedoch Arrays oder Matrizen.
Sobald jedoch eine Matrix übergeben wird - und sei es auch nur eine 1x1-Matrix - streikt SEQUENZ.
Der @-Operator erzeugt aus den xS- und xL-Matrizen (beide sind 1x1-Matrizen) eine Zahl - und dann funktioniert SEQUENZ
Gruß Anton.

Windows 10 64bit
Office365 32bit
Antworten Top
#9
Hallo Anton,

schöne Erläuterung, hatte ich mir so schon gedacht, konnte es aber nicht so gut erklären.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


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