Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[LAMBDA] NACHZEILE kann anscheinend nur ein Feld
#1
Siehe Anhang mit INDEX, wo ich versuche, ein Teil-Array aus dem Array zur Untersummierung zu bilden. Möglicherweise klappt das dann mit SPLIT(TEXTVERKETTEN(, weil so zu einer Zeit eine einzelne Zelle entsteht ... ein nerviger Umweg. EDIT: Nein, noch umständlicher, innen mit MAP(TEXTVERKETTEN(, außen mit NACHZEILE. Mein erstes Mal mit MAP, übrigens. Einfach ohne Wissen verwendet.

Die gleiche Beobachtung war schon hier mit SORTIEREN: 
office-hilfe.com/support/threads/spalten-einer-zeile-sortieren-und-das-gleich-fuer-mehrere-zeilen.55595/


.xlsx   NACHZEILE-Problem mit INDEX.xlsx (Größe: 15,09 KB / Downloads: 3)
Antworten Top
#2
Hallo,

richtig, das geht nicht, ein Subarray aus einem gerade behandelten Array zu extrahieren. Dafür musst Du nach meinem derzeitigen Kenntnisstand
eine Art Kopie des (Sub)Arrays anlegen - bspw. durch Neuerzeugen über SEQUENZ und Zuordnen über MAP oder MATRIXERSTELLEN.
Auf die Kopie lässt sich dann NACHZEILE anwenden. Anbei, wie ich es lösen würde:

Code:
=LET(Daten;$A$2:$A$24;Umsatz;$B$2:$B$24;
     vnDaten;INDEX(Daten;0;1);
     vnUmsatz;INDEX(Umsatz;0;1);
     vnKumulation;NACHZEILE(MAP(SEQUENZ(ZEILEN(vnDaten);3);LAMBDA(A;LET(X;AUFRUNDEN(A/3;0);Y;WENN(REST(A;3)>0;REST(A;3);3);Z;
     WOCHENTAG(INDEX(Daten;X;1);2);WENN(Z<6;WENN(Z<5;WENN(Y>1;0;INDEX(vnUmsatz;X;1));INDEX(vnUmsatz;X+Y-1;1));0))));LAMBDA(A;SUMME(A)));
     vnMatrix;MATRIXERSTELLEN(ZEILEN(vnDaten);2;LAMBDA(X;Y;WENN(Y<2;INDEX(vnDaten;X;1);INDEX(vnKumulation;X;1))));
     FILTER(vnMatrix;REST(INDEX(vnMatrix;0;1);7)>1))

Es geht auch ohne MAP:

Code:
=LET(Daten;$A$2:$A$24;Umsatz;$B$2:$B$24;
     vnDaten;INDEX(Daten;0;1);
     vnUmsatz;INDEX(Umsatz;0;1);
     vnKumulation;NACHZEILE(MATRIXERSTELLEN(ZEILEN(vnDaten);3;LAMBDA(X;Y;
     LET(Z;WOCHENTAG(INDEX(Daten;X;1);2);WENN(Z<6;WENN(Z<5;WENN(Y>1;0;INDEX(vnUmsatz;X;1));INDEX(vnUmsatz;X+Y-1;1));0))));LAMBDA(A;SUMME(A)));
     vnMatrix;MATRIXERSTELLEN(ZEILEN(vnDaten);2;LAMBDA(X;Y;WENN(Y<2;INDEX(vnDaten;X;1);INDEX(vnKumulation;X;1))));
     FILTER(vnMatrix;REST(INDEX(vnMatrix;0;1);7)>1))

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • LCohen
Antworten Top
#3
Das ist nett ... so kann man anhand des Problems auch einen fremden Code schneller verstehen.

MATRIXERSTELLEN ist im Grunde hier wie WAHL. Wo wäre wohl der Vorteil?

Übrigens hast Du den letzten Umsatz nicht gültig gefüllt. Es ist bei allen Arrays oft das Problem, dass lfd. und Vorgänger berücksichtigt werden müssen (und somit ein Eintrag wegfällt, wenn man das Array nicht um einen Eintrag verlängert).
Antworten Top
#4
Hallo,

hmm, den Zusammenhang mit WAHL verstehe ich nicht ganz, denn MATRIXERSTELLEN erzeugt Dir ja eine neue Matrix,
die Du eben an NACHZEILE übergeben kannst. WAHL könnte man vielleicht anstatt der WENNs nehmen. Aber sonst?

Stimmt, die vorherige Formel lieferte einen Bezugsfehler, wenn das Startdatum verändert wurde, wegen fehlender Array-Elemente.
Ich habe das mal ergänzt; durch +2 im Array. Allerdings verstehe ich die Problematik so, dass wenn am Ende noch Sa. und So.
drin sind, die wiederum auf Fr. aufaddieren zu sind (oder nicht?). Daher dann am Ende 666 statt 122.

Aktuelle Formel, besser zum Debuggen:

Code:
=LET(Daten;$A$2:$A$24;Umsatz;$B$2:$B$24;
     vnDaten;INDEX(Daten;0;1);
     vnUmsatz;INDEX(Umsatz;0;1);
     vnVerteilung;MATRIXERSTELLEN(ZEILEN(vnDaten)+2;3;LAMBDA(X;Y;LET(Z;WENNFEHLER(WOCHENTAG(INDEX(Daten;X;1);2);0);
     WENN(Z<6;WENN(Z<5;WENN(Y>1;0;WENNFEHLER(INDEX(vnUmsatz;X;1);0));WENNFEHLER(INDEX(vnUmsatz;X+Y-1;1);0));0))));
     vnKumulation;NACHZEILE(vnVerteilung;LAMBDA(A;SUMME(A)));
     vnMatrix;MATRIXERSTELLEN(ZEILEN(vnVerteilung);2;LAMBDA(X;Y;WENN(Y<2;WENNFEHLER(INDEX(vnDaten;X;1);0);INDEX(vnKumulation;X;1))));
     vnFilter;FILTER(vnMatrix;REST(INDEX(vnMatrix;0;1);7)>1);vnResult;vnFilter;vnResult)

Gruß


Angehängte Dateien
.xlsx   NACHZEILE-Problem.xlsx (Größe: 17,25 KB / Downloads: 1)
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#5
WAHL tut das auch (eine neue Matrix erstellen, die dann auch per A1# adressierbar ist):

A1: =WAHL({1.2};{1;2;3;4;5};{6;7;8;9}) ergibt

1 6
2 7
3 8
4 9
5 #NV
Antworten Top
#6
Ich habe die Funktionen aus dem Nebenthread clever-excel-forum.de/Thread-LAMBDA-Diverse-Helferlein verwendet, und die Umwandlung sieht mit den dortigen "Standardfunktionen" (fett) jetzt so aus:

=LET(
z;CELL.COL(A1);
p;z-(REST(z;7)<2)*(REST(z;7)+1);
r;WAHL({1.2.3};p;ACCUM(CELL.COL(B1));SHOW.LAST(p;99999));
x;FILTER(r;INDEX(r;;3));
WAHL({1.2};INDEX(x;;1);DECUM(INDEX(x;;2))))


mit Erläuterung der Variablen:
z: macht aus A1 mit CELL.COL einen Spalten-A1# (hier A1:A3652)
p: lässt davon die WE auf das Datum des vorhergehenden Freitags zurückfallen
r: zeigt die modifizierten Datümer p, die kumulierten Werte der dynamisierten Spalte B1 sowie das hinzugefügte FILTER-Kennzeichen WAHR/FALSCH
x: filtert derart, dass jeweils nur der (dem Freitag zugewiesene ehemalige) Sonntag bleibt, Freitag und Samstag aber verschwinden
WAHL stellt die beiden Datenspalten nebeneinander und entkumuliert die Beträge. Dabei entsteht jeweils am Freitag die Differenz von Sonntagabend und Donnerstagabend (jeweils kumuliert).

Super Performance in XLWeb, by the way! Dadurch, dass ich die LAMBDA-Funktionen benannt habe, gibt es auch keine (Nicht)-Übersetzungsprobleme.

Bitte in der Datei den Apostroph in A1:B1 entfernen, spart Uploadplatz im Forum
.xlsx   NACHZEILE-Problem mit INDEX.xlsx (Größe: 11,3 KB / Downloads: 0)
Antworten Top


Gehe zu:


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