ACCUM(Einzelwerte) in Zeile oder Spalte. Kumuliert einen Vektor.
=ACCUM({1;2;5;3}) ergibt {1;3;8;11}
=LAMBDA(b;SCAN(;b;LAMBDA(c;a;a+c))) benannt als ACCUM
Nutzen: Wird zur Differenzenbildung benötigt, die viel effektiver ist, als Summierung. Beispiel: Ablesetabellen für das Subtrahieren von Wahrscheinlichkeiten (z.B. Binomialverteilung).
DECUM(kumulierteWerte) in Zeile oder Spalte. Entkumuliert einen Vektor.
=DECUM({1;3;8;11}) ergibt {1;2;5;3}
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)-(d>1)*INDEX(x;d-1))) benannt als DECUM
Nutzen: Zeigt die Differenzen kumulierter Werte (Einzelwerte). Umkehrfunktion zu ACCUM.
Hinweis: Ich hätte gedacht, dass das auch mit SCAN geht (dort: a-c). Vielleicht schafft es ja einer. Bei mir kam nur Müll raus.
DIFF.FIRST(Spaltenwerte) eines Spaltenvektors. Zeigt die Differenz vom Datensatzfeld zu dessen Vorgänger.
=DIFF.FIRST({-1;-1;2;3;4;5;6;6;6;9}+(1&-22)) ergibt {44561;0;3;1;1;1;1;0;0;3}
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)-(d>1)*INDEX(x;d-1))) benannt als DIFF.FIRST
Nutzen: Man kann Differenzen von 0 als teilweises Duplikat eines Datensatzes auffassen und diese wegfiltern (FILTER), ohne dass es sich um echte Duplikate (da nur teilweise Duplikat) handelt. Der jeweils erste (FIRST) Datensatz von Wiederholern bleibt dann stehen.
DIFF.LAST(Spaltenwerte;Endwert) eines Spaltenvektors. Zeigt die Differenz vom Datensatzfeld zu dessen Nachfolger.
=DIFF.LAST({-1;-1;2;3;4;5;6;6;6;9}+(1&-22);) ergibt {0;3;1;1;1;1;0;0;3;1}
=LAMBDA(x;o;LET(d;SEQUENZ(ZEILEN(x));WENN(d<ZEILEN(x);INDEX(x;d+1);WENN(o;o;MAX(x)+1))-INDEX(x;d))) benannt als DIFF.LAST
Nutzen: Wie DIFF.FIRST, nur dass hier der letzte (LAST) Wiederholer stehen bleibt. Das zweite Argument o der Funktion kann mit einem Endwert vorbesetzt werden (den kann der Vektor nämlich nicht wissen, da der Nachfolger des letzten Satzes nicht bekannt ist!), oder es wird das Maximum+1 der Spaltenwerte genommen.
SHOW.FIRST(Spalteninhalte) zeigt Übereinstimmung vom Datensatzfeld zu dessen Vorgänger an.
Wie DIFF.FIRST, nur sind hier auch alphanum. Werte möglich. Ausgabevektor daher mit WAHR und FALSCH.
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)<>(d>1)*INDEX(x;d-1))) benannt als SHOW.FIRST
SHOW.LAST(Spalteninhalte;Endwert) zeigt Übereinstimmung vom Datensatzfeld zu dessen Nachfolger an.
Wie DIFF.LAST, nur sind hier auch alphanum. Werte möglich. Ausgabevektor daher mit WAHR und FALSCH.
=LAMBDA(x;o;LET(d;SEQUENZ(ZEILEN(x));WENN(d<ZEILEN(x);INDEX(x;d+1);WENN(o;o;MAX(x)+1))<>INDEX(x;d))) benannt als SHOW.LAST
CELL.COL(Einzelzelle) ergibt einen dynamischen Spaltenvektor, ausgehend von der Zelle
=CELL.COL(A1) ergibt A1:A9, wenn außer diesen 9 Einträgen ohne Lücke keine Spalteneinträge vorliegen.
=LAMBDA(b;LET(f;INDEX($A:$XFC;;SPALTE(b));INDEX(f;SEQUENZ(ANZAHL2(f);;ZEILE(b))))) benannt als CELL.COL
Nutzen: =CELL.COL(A1) erlaubt eine kürzere Schreibweise als =A1:INDEX(A:A;ANZAHL2(A:A))
CELL.ROW(Einzelzelle) ergibt einen dynamischen Zeilenvektor, ausgehend von der Zelle
=CELL.ROW(A2) ergibt A2:G2, wenn außer diesen 7 Einträgen ohne Lücke keine Zeileneinträge vorliegen.
=LAMBDA(b;LET(f;INDEX($A:$XFC;ZEILE(b););INDEX(f;SEQUENZ(;ANZAHL2(f);SPALTE(b))))) benannt als CELL.ROW
Nutzen: =CELL.ROW(A1) erlaubt eine kürzere Schreibweise als =A1:INDEX(1:1;ANZAHL2(1:1))
RANGE.LONGESTCOL(EinzeiligerRange) ergibt einen dynamischen Zeilenbereich bis vor die erste Leerzeile
=RANGE.LONGESTCOL(N3:Q3) ergibt einen dynamischen Bereich von N3:Qx, wobei x+1 die erste Leerzeile in den Spalten N:Q nach der Zeile 3 darstellt. Der Unterschied zu .CurrentRegion liegt in den anderen 3 Seiten des Ranges (oben, links und rechts), die hier nicht beachtet werden.
=LAMBDA(d;LET(b;INDEX($A:$XFC;SEQUENZ(9999;;ZEILE(d));SPALTE(d));
INDEX(b;SEQUENZ(VERGLEICH(;NACHZEILE(b;LAMBDA(b;SUMME(LÄNGE(b))));)-1);SEQUENZ(;SPALTEN(d))))) benannt als RANGE.LONGESTCOL
Anmerkung: Die 9999 lässt die Funktion möglichst schnell rechnen. Sind mehr Datensätze vorhanden, kann die Zahl vergrößert und die Funktion damit verlangsamt werden.
_________________________________________________
Anmerkungen zu diesen Funktionen: Vermutlich kann eine der MS-LAMBDA-Helper-Funktionen (die ich noch nicht alle ausprobiert oder verstanden habe) hier noch abkürzen oder beschleunigen. Oder auch schlicht ein anderer Ansatz? Es würde mich freuen, das in diesem Thread zu lesen. - Was fällt mir sonst so auf? Manchmal reicht in den Definitionen von LET und LAMBDA =INDEX(A1:Z99;;5) aus, manchmal geht nur =INDEX(A1:Z99;SEQUENZ(ZEILEN(A1:Z99));5). Das System dahinter habe ich noch nicht verstanden.
Die DIFF.- und SHOW.-Funktionen sind - neben den Differenzinformationen - dafür da, dass man beim FILTERn - anders als bei EINDEUTIG() - noch weiß, welcher der Datensätze bestehen bleibt, etwa durch Nummernvergabe.
Angeregt durch diesen Thread: clever-excel-forum.de/Thread-LAMBDA-NACHZEILE-kann-anscheinend-nur-ein-Feld
=ACCUM({1;2;5;3}) ergibt {1;3;8;11}
=LAMBDA(b;SCAN(;b;LAMBDA(c;a;a+c))) benannt als ACCUM
Nutzen: Wird zur Differenzenbildung benötigt, die viel effektiver ist, als Summierung. Beispiel: Ablesetabellen für das Subtrahieren von Wahrscheinlichkeiten (z.B. Binomialverteilung).
DECUM(kumulierteWerte) in Zeile oder Spalte. Entkumuliert einen Vektor.
=DECUM({1;3;8;11}) ergibt {1;2;5;3}
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)-(d>1)*INDEX(x;d-1))) benannt als DECUM
Nutzen: Zeigt die Differenzen kumulierter Werte (Einzelwerte). Umkehrfunktion zu ACCUM.
Hinweis: Ich hätte gedacht, dass das auch mit SCAN geht (dort: a-c). Vielleicht schafft es ja einer. Bei mir kam nur Müll raus.
DIFF.FIRST(Spaltenwerte) eines Spaltenvektors. Zeigt die Differenz vom Datensatzfeld zu dessen Vorgänger.
=DIFF.FIRST({-1;-1;2;3;4;5;6;6;6;9}+(1&-22)) ergibt {44561;0;3;1;1;1;1;0;0;3}
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)-(d>1)*INDEX(x;d-1))) benannt als DIFF.FIRST
Nutzen: Man kann Differenzen von 0 als teilweises Duplikat eines Datensatzes auffassen und diese wegfiltern (FILTER), ohne dass es sich um echte Duplikate (da nur teilweise Duplikat) handelt. Der jeweils erste (FIRST) Datensatz von Wiederholern bleibt dann stehen.
DIFF.LAST(Spaltenwerte;Endwert) eines Spaltenvektors. Zeigt die Differenz vom Datensatzfeld zu dessen Nachfolger.
=DIFF.LAST({-1;-1;2;3;4;5;6;6;6;9}+(1&-22);) ergibt {0;3;1;1;1;1;0;0;3;1}
=LAMBDA(x;o;LET(d;SEQUENZ(ZEILEN(x));WENN(d<ZEILEN(x);INDEX(x;d+1);WENN(o;o;MAX(x)+1))-INDEX(x;d))) benannt als DIFF.LAST
Nutzen: Wie DIFF.FIRST, nur dass hier der letzte (LAST) Wiederholer stehen bleibt. Das zweite Argument o der Funktion kann mit einem Endwert vorbesetzt werden (den kann der Vektor nämlich nicht wissen, da der Nachfolger des letzten Satzes nicht bekannt ist!), oder es wird das Maximum+1 der Spaltenwerte genommen.
SHOW.FIRST(Spalteninhalte) zeigt Übereinstimmung vom Datensatzfeld zu dessen Vorgänger an.
Wie DIFF.FIRST, nur sind hier auch alphanum. Werte möglich. Ausgabevektor daher mit WAHR und FALSCH.
=LAMBDA(x;LET(d;SEQUENZ(ZEILEN(x));INDEX(x;d)<>(d>1)*INDEX(x;d-1))) benannt als SHOW.FIRST
SHOW.LAST(Spalteninhalte;Endwert) zeigt Übereinstimmung vom Datensatzfeld zu dessen Nachfolger an.
Wie DIFF.LAST, nur sind hier auch alphanum. Werte möglich. Ausgabevektor daher mit WAHR und FALSCH.
=LAMBDA(x;o;LET(d;SEQUENZ(ZEILEN(x));WENN(d<ZEILEN(x);INDEX(x;d+1);WENN(o;o;MAX(x)+1))<>INDEX(x;d))) benannt als SHOW.LAST
CELL.COL(Einzelzelle) ergibt einen dynamischen Spaltenvektor, ausgehend von der Zelle
=CELL.COL(A1) ergibt A1:A9, wenn außer diesen 9 Einträgen ohne Lücke keine Spalteneinträge vorliegen.
=LAMBDA(b;LET(f;INDEX($A:$XFC;;SPALTE(b));INDEX(f;SEQUENZ(ANZAHL2(f);;ZEILE(b))))) benannt als CELL.COL
Nutzen: =CELL.COL(A1) erlaubt eine kürzere Schreibweise als =A1:INDEX(A:A;ANZAHL2(A:A))
CELL.ROW(Einzelzelle) ergibt einen dynamischen Zeilenvektor, ausgehend von der Zelle
=CELL.ROW(A2) ergibt A2:G2, wenn außer diesen 7 Einträgen ohne Lücke keine Zeileneinträge vorliegen.
=LAMBDA(b;LET(f;INDEX($A:$XFC;ZEILE(b););INDEX(f;SEQUENZ(;ANZAHL2(f);SPALTE(b))))) benannt als CELL.ROW
Nutzen: =CELL.ROW(A1) erlaubt eine kürzere Schreibweise als =A1:INDEX(1:1;ANZAHL2(1:1))
RANGE.LONGESTCOL(EinzeiligerRange) ergibt einen dynamischen Zeilenbereich bis vor die erste Leerzeile
=RANGE.LONGESTCOL(N3:Q3) ergibt einen dynamischen Bereich von N3:Qx, wobei x+1 die erste Leerzeile in den Spalten N:Q nach der Zeile 3 darstellt. Der Unterschied zu .CurrentRegion liegt in den anderen 3 Seiten des Ranges (oben, links und rechts), die hier nicht beachtet werden.
=LAMBDA(d;LET(b;INDEX($A:$XFC;SEQUENZ(9999;;ZEILE(d));SPALTE(d));
INDEX(b;SEQUENZ(VERGLEICH(;NACHZEILE(b;LAMBDA(b;SUMME(LÄNGE(b))));)-1);SEQUENZ(;SPALTEN(d))))) benannt als RANGE.LONGESTCOL
Anmerkung: Die 9999 lässt die Funktion möglichst schnell rechnen. Sind mehr Datensätze vorhanden, kann die Zahl vergrößert und die Funktion damit verlangsamt werden.
_________________________________________________
Anmerkungen zu diesen Funktionen: Vermutlich kann eine der MS-LAMBDA-Helper-Funktionen (die ich noch nicht alle ausprobiert oder verstanden habe) hier noch abkürzen oder beschleunigen. Oder auch schlicht ein anderer Ansatz? Es würde mich freuen, das in diesem Thread zu lesen. - Was fällt mir sonst so auf? Manchmal reicht in den Definitionen von LET und LAMBDA =INDEX(A1:Z99;;5) aus, manchmal geht nur =INDEX(A1:Z99;SEQUENZ(ZEILEN(A1:Z99));5). Das System dahinter habe ich noch nicht verstanden.
Die DIFF.- und SHOW.-Funktionen sind - neben den Differenzinformationen - dafür da, dass man beim FILTERn - anders als bei EINDEUTIG() - noch weiß, welcher der Datensätze bestehen bleibt, etwa durch Nummernvergabe.
Angeregt durch diesen Thread: clever-excel-forum.de/Thread-LAMBDA-NACHZEILE-kann-anscheinend-nur-ein-Feld
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel).