Clever-Excel-Forum

Normale Version: [LAMBDA] In NACHZEILE verwendete Funktion dynamisieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

folgend an dem Beispiel zu NACHZEILE, wie sich eine erwartete LAMBDA-Funktion insoweit parametrisieren lässt, dass eine bestimmte
Excel-Funktion aufgerufen wird. Beispielsweise SUMME oder MITTELWERT.

Angenommen wir haben im Bereich A1:B2 die Zahlen 1 bis 6 stehen, erzeugt durch SEQUENZ(3;2). Das sieht dann so aus:

Code:
  | A | B |
1 | 1 | 2 |
2 | 3 | 4 |
3 | 5 | 6 |

Möchte ich nun NACHZEILE anwenden, kann ich bspw. folgende Formeln verwenden. Als Array ist dann hier jeweils eine
einzelne Zeile des Bereichs zu sehen.

Code:
Summe      : =NACHZEILE($A$1:$B$3;LAMBDA(Array;SUMME(Array)))
Mittelwert : =NACHZEILE($A$1:$B$3;LAMBDA(Array;MITTELWERT(Array)))
Min        : =NACHZEILE($A$1:$B$3;LAMBDA(Array;MIN(Array)))
Max        : =NACHZEILE($A$1:$B$3;LAMBDA(Array;MAX(Array)))

Das kann ich aber auch umformen in:

Code:
Summe      : =NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(SUMME(Array))()))
Mittelwert : =NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(MITTELWERT(Array))()))
Min        : =NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(MIN(Array))()))
Max        : =NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(MAX(Array))()))

Da die Funktionen jetzt jeweils in einer LAMBDA-Funktion verpackt sind, können wir diese schon mal zusammenführen, was dann ergibt:

Code:
=NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(WAHL(1;SUMME(Array);MITTELWERT(Array);MIN(Array);MAX(Array)))()))

Parametrisieren wir nun die 1 in WAHL und übergeben die 1 als Argument:

Code:
=NACHZEILE($A$1:$B$3;LAMBDA(Array;LAMBDA(Function;WAHL(Function;SUMME(Array);MITTELWERT(Array);MIN(Array);MAX(Array)))(1)))

Die Funktion NACHZEILE nimmt in ihrer LAMBDA-Funktion an, dass das erstes Argument das Array bzw. der an NACHZEILE übergebene Bereich ist.
Nichts hindert uns jedoch daran, über eine LAMBDA-Funktion wiederum eine LAMBDA-Funktion zurückzugeben, die die passenden Argumente hat.
Insofern können wir das nun umdrehen:

Code:
=NACHZEILE($A$1:$B$3;LAMBDA(Function;LAMBDA(Array;WAHL(Function;SUMME(Array);MITTELWERT(Array);MIN(Array);MAX(Array))))(1))

Somit lässt sich nun im Namensmanager folgende LAMBDA-Funktion anlegen:

Code:
Funktion=LAMBDA(Function;LAMBDA(Array;WAHL(Function;SUMME(Array);MITTELWERT(Array);MIN(Array);MAX(Array))))

Und das war's auch schon. Jetzt lässt sich NACHZEILE wie folgt verwenden:

Code:
=NACHZEILE($A$1:$B$3;Funktion(1)) mit 1 = SUMME, 2 = MITTELWERT, usw.

Gruß
Ähnlich TEILERGBNIS oder AGGREGAT Smile

Ansonsten: Interessante andere Verwendungen von LAMBDA, die ich noch nicht kannte.
Eine excelgegebene Verkürzung, wie schon angesprochen, hier zum Thema:

=NZ(9;A1:B3) ergibt 3;7;11

mit

NZ: =LAMBDA(b;a;NACHZEILE(a;LAMBDA(a;AGGREGAT(b;;a)))) einfache AGGREGAT-Variante bis Funktion 13 "MODUS.EINF"

(wenn es wirklich nur um Standardfunktionen geht. Bei individuellen Ausdrücken, v.a. mit Hinzuziehung anderer Bezüge oder Werte, ist WAHL unumgänglich)
__________________
Will man die weiteren Möglichkeiten

1. Fehlerbehandlung
2. auch ab Funktion 14 "KGRÖSSTE" bis 19 "QUARTILE.EXKL"
3. Mehrfachbereiche,

von AGGREGAT nutzen, kann man NZ natürlich entsprechend aufbohren.
__________________
Fazit: AGGREGAT bekommt hier einen recht wertvollen Zusatznutzen nachgereicht.