Clever-Excel-Forum

Normale Version: [LAMBDA] CONDENSE
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
=CONDENSE(Bereich;[links_ohne]) schiebt gleiche Folgesätze zusammen

=LAMBDA(Bereich;[links_ohne];LET(
x;Bereich;
w;WEGLASSEN(x;;1);
y;NACHZEILE(w;LAMBDA(a;TEXTVERKETTEN("-";;a)));
b;WENN(VSTAPELN(1;--(WEGLASSEN(y;1)<>WEGLASSEN(y;-1)));SEQUENZ(ZEILEN(y)););
z;SCAN(;b;LAMBDA(c;a;WENN(a;a;c)));
a;LET(x;VSTAPELN(0;VERGLEICH(z;z));WEGLASSEN(x;1)-WEGLASSEN(x;-1));
WEGLASSEN(FILTER(HSTAPELN(a;INDEX(INDEX(x;;1);z);w);a);;links_ohne)))


benannt als CONDENSE

Funktionserläuterung:
x: Der Bereich wird übergeben
w: Die erste Spalte wird weggenommen (w ist also der zusammenzuschiebende Rest)
y: w wird zeilenweise verkettet
b: Identische Folgesätze (bezogen auf y) erhalten eine 0, sonst ihre bisherige Satznummer
z: b=0 erhält die vorangehende Satznummer (FILL)
a: Über die (DECUM)ulierung von z werden die Anzahlen pro Satz ermittelt; Wiederholer bekommen die 0.
Die nebeneinandergestellten a;z;w werden nach a<>0 gefiltert. Werden die Anzahlen nicht benötigt, werden sie mit links_ohne=1 nicht berücksichtigt, mit links_ohne=2 wird auch der Inhalt der ersten Spalte von x nicht berücksichtigt.

Szenario A1:D5:
Alpha__ 1 0 1
Beta___ 1 0 1
Gamma__ 0 1 1
Delta__ 1 0 1
Epsilon 1 1 0


Beispiele:
=CONDENSE(A1:D5)
2 Alpha__ 1 0 1
1 Gamma__ 0 1 1
1 Delta__ 1 0 1
1 Epsilon 1 1 0


=CONDENSE(A1:D5;1)
Alpha__ 1 0 1
Gamma__ 0 1 1
Delta__ 1 0 1
Epsilon 1 1 0

=CONDENSE(SORTIERENNACH(A1:D5;NACHZEILE(B1:D5;LAMBDA(a;TEXTVERKETTEN("-";;a)));-1))
1 Epsilon 1 1 0
3 Alpha__ 1 0 1
1 Gamma__ 0 1 1


Anmerkungen:
Im letzten Beispiel werden die letzten drei Spalten hierarchisch absteigend sortiert. Der vorher ERSTE übereinstimmende Begriff wird vorangestellt, wie bei den beiden vorangehenden Beispielen auch. Da das optionale Argument links_ohne ausgelassen wird, wird die Anzahl der Datensätze vorangestellt. Durch den Sort wird sinngemäß ein EINDEUTIG erreicht, aber mit mehr Information durch die zusätzlichen beiden linken Spalten. Am ersten Beispiel sieht man, dass CONDENSE die Reihenfolge beachtet, und dass sinngemäß EINDEUTIG nur lokal für jeweils benachbarte gleiche Datensätze angewendet wird. EINDEUTIG() wird nicht verwendet. CONDENSE ist UNIQUE.PARTIAL, welches viel mehr Zeilen hat, weil es damals wichtige dynamische Funktionen noch nicht gab, im Ergebnis sehr ähnlich.
Moin,

sehr schöne Funktion :-)

Gruß