01.05.2022, 14:49
Moin,
angenommen, es würde eine eindeutige Liste von Werten benötigt, die jedoch Groß- und Kleinschreibung berücksichtigt.
Wie sicher bekannt, unterscheidet EINDEUTIG nicht zwischen Groß und Klein, weshalb die Funktion in diesem Fall wohl
nicht verwendet werden kann.
Folgend zwei Möglichkeiten. Beide Möglichkeiten nutzen IDENTISCH zum Vergleich der Werte. Die erste Formel ist
etwas länger und verwendet Matrizen zum Vergleich. Die zweite verwendet REDUCE und dadurch implizit eine Rekursion.
Man könnte auch eine eigene rekursive LAMBDA-Funktion schreiben, REDUCE ist aber hier wesentlich eleganter.
Die erste Formel basiert darauf, dass die einzelnen Elemente der Liste mit der gleichen, jedoch transponierten Liste
verglichen und eine Matrix anhand von MATRIXERSTELLEN erstellt wird. Hierbei wird nur der Bereich oberhalb der Diagonale
in der Matrix berücksichtigt. Diese Matrix wird anschließend mit einer Einser-Reihe multipliziert, um aus der Matrix eine
Zeile zu machen. Danach wird das Ergebnis mit 1 verglichen und mit dem Index der Listenelemente multipliziert, was als
Ergebnis die Indizes ergibt, die zu berücksichtigen sind. Die anderen sind Null. Der Rest ist dann recht simpel:
Filtern und Listenelemente extrahieren und wieder transponieren.
Die zweite Formel verwendet REDUCE und VSTACK. REDUCE sorgt dafür, dass alle Elemente der Liste durchlaufen werden
und dabei der Vorgängerwert berücksichtigt wird. Das interessante ist übrigens, dass das auch mit Arrays funktioniert.
Das Array wächst hier bei jedem Durchlauf - je nachdem, ob der aktuell iterierte Wert aus der Ausgangsliste
im Array des zuvor durchlaufenen Schrittes enthalten ist oder nicht. Das Anhängen macht dann VSTACK.
Die Formel stammt nicht von mir, finde diese aber sehr elegant.
Interessant wäre mal herauszufinden, wie sich beide Formeln bei sehr großen Listen verhalten; bspw. bei der Performance.
Gruß
angenommen, es würde eine eindeutige Liste von Werten benötigt, die jedoch Groß- und Kleinschreibung berücksichtigt.
Wie sicher bekannt, unterscheidet EINDEUTIG nicht zwischen Groß und Klein, weshalb die Funktion in diesem Fall wohl
nicht verwendet werden kann.
Folgend zwei Möglichkeiten. Beide Möglichkeiten nutzen IDENTISCH zum Vergleich der Werte. Die erste Formel ist
etwas länger und verwendet Matrizen zum Vergleich. Die zweite verwendet REDUCE und dadurch implizit eine Rekursion.
Man könnte auch eine eigene rekursive LAMBDA-Funktion schreiben, REDUCE ist aber hier wesentlich eleganter.
Die erste Formel basiert darauf, dass die einzelnen Elemente der Liste mit der gleichen, jedoch transponierten Liste
verglichen und eine Matrix anhand von MATRIXERSTELLEN erstellt wird. Hierbei wird nur der Bereich oberhalb der Diagonale
in der Matrix berücksichtigt. Diese Matrix wird anschließend mit einer Einser-Reihe multipliziert, um aus der Matrix eine
Zeile zu machen. Danach wird das Ergebnis mit 1 verglichen und mit dem Index der Listenelemente multipliziert, was als
Ergebnis die Indizes ergibt, die zu berücksichtigen sind. Die anderen sind Null. Der Rest ist dann recht simpel:
Filtern und Listenelemente extrahieren und wieder transponieren.
PHP-Code:
=LET(Daten;$B$3:$B$11;N;ZEILEN(Daten);M;SEQUENZ(1;N)*(MMULT(SEQUENZ(1;N;1;0);MATRIXERSTELLEN(N;N;
LAMBDA(X;Y;WENN(X>Y;0;--(IDENTISCH(INDEX(Daten;X;1);INDEX(Daten;Y;1)))))))=1);
MTRANS(INDEX(Daten;FILTER(M;M>0);1)))
Die zweite Formel verwendet REDUCE und VSTACK. REDUCE sorgt dafür, dass alle Elemente der Liste durchlaufen werden
und dabei der Vorgängerwert berücksichtigt wird. Das interessante ist übrigens, dass das auch mit Arrays funktioniert.
Das Array wächst hier bei jedem Durchlauf - je nachdem, ob der aktuell iterierte Wert aus der Ausgangsliste
im Array des zuvor durchlaufenen Schrittes enthalten ist oder nicht. Das Anhängen macht dann VSTACK.
Die Formel stammt nicht von mir, finde diese aber sehr elegant.
PHP-Code:
=REDUCE(;$B$3:$B$11;LAMBDA(A;V;WENN(SUMME(--IDENTISCH(A;V))>0;A;VSTACK(A;V))))
Interessant wäre mal herauszufinden, wie sich beide Formeln bei sehr großen Listen verhalten; bspw. bei der Performance.
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
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner