FAQ — Welche Fragen werden in diesem Artikel beantwortet?
Q: Was ist ein rekursives Lambda und worin unterscheidet es sich von einem normalen Lambda?
A: Ein normaler Lambda-Ausdruck nimmt Eingaben entgegen und gibt ein Ergebnis zurück. Ein rekursiver Lambda-Ausdruck funktioniert ähnlich, darf sich jedoch im Rahmen seiner eigenen Berechnung selbst aufrufen. Dabei bearbeitet er bei jedem Aufruf eine kleinere oder einfachere Version des Problems, bis er einen Zustand erreicht, in dem er eine direkte Antwort zurückgeben kann, ohne sich erneut aufzurufen. Dieser Endpunkt wird als Basisfall bezeichnet.
Q: Muss ich Programmierer sein, um rekursives LAMBDA zu verwenden?
A: Nein, das Konzept der Rekursion mag zunächst ungewohnt erscheinen, doch die Funktionsweise in Excel ist einfach, sobald das zugrunde liegende Muster verstanden wurde. In diesem Artikel wird das Thema zunächst anhand von Alltagsanalogien erklärt, bevor es zu den Formeln übergeht. Wenn Sie die IF-Funktion verstehen, können Sie den Basisfall nachvollziehen. Wenn Sie LAMBDA verstehen, können Sie rekursive Formeln schreiben.
Q: Was ist der häufigste Fehler beim Schreiben eines rekursiven LAMBDA-Ausdrucks?
A: Das Vergessen des Basisfalls oder das Schreiben eines Basisfalls, der niemals erreicht wird. Ohne eine korrekte Abbruchbedingung ruft sich die Funktion endlos selbst auf. Excel verfügt über eine integrierte Begrenzung und gibt die Fehlermeldung #NUM! oder #VALUE! aus, wenn diese Grenze überschritten wird. Daran erkennen Sie, dass die Rekursion nicht beendet wird.
Q: Kann ich einem rekursiven LAMBDA-Ausdruck einen Namen geben, damit ich ihn in der gesamten Arbeitsmappe wiederverwenden kann?
A: Ja, das ist die empfohlene Vorgehensweise. Definieren Sie den rekursiven LAMBDA-Ausdruck im Namensmanager (Formeln > Namens-Manager > Neu). Geben Sie ihm einen kurzen, aussagekräftigen Namen. Sobald er gespeichert ist, können Sie ihn wie eine integrierte Funktion aus jeder beliebigen Zelle der Arbeitsmappe aufrufen.
Q: Wann ist Rekursion in Excel tatsächlich nützlich?
A: Rekursion ist nützlich, wenn ein Problem von Natur aus selbstähnlich ist, das heißt, wenn sich die Lösung für ein großes Problem anhand der Lösung für eine kleinere Version desselben Problems ableiten lässt. Die Berechnung von kumulativen Summen, die Verarbeitung verschachtelter Strukturen, die Berechnung von Zahlenfolgen und die Bereinigung von Text mit einer unbekannten Anzahl von Wiederholungen sind allesamt Fälle, in denen Rekursion eine saubere Lösung liefert, die mit Schleifen oder Hilfstabellen nicht erreicht werden kann.
Q: Rekursives LAMBDA ist eine Funktion, die Probleme löst, indem sie mit sich selbst kommuniziert.
A: Die meisten Formeln in Excel folgen einem geradlinigen Ablauf: Sie empfangen Eingaben, führen eine Berechnung durch und geben ein Ergebnis zurück. Eine rekursive Funktion hingegen folgt einem anderen Weg. Zunächst prüft sie, ob das Problem klein genug ist, um direkt gelöst zu werden. Falls nicht, ruft sie sich selbst mit einer etwas kleineren Version des Problems auf. Dieser Vorgang wird so lange wiederholt, bis das Problem einfach genug ist, um sofort beantwortet zu werden.
Das mag abstrakt klingen. Eine konkrete Analogie aus dem Alltag macht es jedoch sofort verständlich.
Rekursion erklärt, ganz ohne Formeln
Stellen Sie sich vor, Sie stehen am Ende einer Warteschlange und möchten wissen, wie viele Personen vor Ihnen stehen. Sie können jedoch nicht bis nach vorne sehen. Sie können nur die Person fragen, die direkt vor Ihnen steht.
Doch auch diese Person kann nicht bis nach vorne sehen. Auch sie kann nicht bis nach vorne sehen. Also fragt sie die Person vor sich. Und so weiter, die Schlange hinunter, bis die Frage die Person ganz vorne erreicht, die direkt vor niemandem steht. Diese Person antwortet: „Vor mir steht niemand. Die Anzahl ist null.“
Die Antwort wandert dann die Schlange zurück. Die zweite Person addiert eins und gibt die Antwort zurück. Die dritte Person addiert eins und gibt die Antwort zurück. Schließlich erreicht die Antwort Sie – die Gesamtzahl der Personen vor Ihnen.
Genau so funktioniert Rekursion.
- Bei jedem Schritt wird eine etwas einfachere Version derselben Frage gestellt.
- Die einfachste Version, der Anfang der Schlange, hat eine direkte Antwort.
- Das Ergebnis wird ausgehend von dieser direkten Antwort wieder aufgebaut.
Die direkte Antwort am Anfang der Schlange ist der Basisfall. Das Weitergeben der Frage ist der rekursive Aufruf.
Was LAMBDA ist, eine kurze Zusammenfassung
Mit LAMBDA können Sie Ihre eigene Funktion direkt in einer Formel definieren, ganz ohne VBA. Sie geben die Parameternamen und die anzuwendende Formel an.
=LAMBDA(n; n * 2)
Hiermit wird eine Funktion definiert, die ein Argument (n) entgegennimmt und das Doppelte dieses Wertes zurückgibt. Damit wird die Funktion zwar definiert, aber nicht aufgerufen. Um sie sofort aufzurufen, fügen Sie das Argument in Klammern hinzu:
=LAMBDA(n; n * 2)(5) → 10
Wenn Sie ein LAMBDA im Namens-Manager unter einem Namen speichern, zum Beispiel DOUBLE, können Sie anschließend in jede beliebige Zelle =DOUBLE(5) eingeben.
Der Aufbau eines rekursiven LAMBDA
Ein rekursives LAMBDA folgt einem festen Muster:
- Prüfen Sie den Basisfall mithilfe von
WENN. Wenn die Eingabe einfach genug ist, um direkt beantwortet zu werden, geben Sie die direkte Antwort zurück. - Andernfalls rufen Sie dieselbe Funktion mit einer kleineren Eingabe auf und kombinieren Sie das Ergebnis.
Definieren Sie die Funktion im Namens-Manager unter einem eigenen Namen, beispielsweise FACTORIAL. In der Formel verweisen Sie auf diesen Namen, um die Funktion erneut aufzurufen:
FACTORIAL = LAMBDA(n;
WENN(n <= 1;
1;
n * FACTORIAL(n - 1)
)
)
- Ist
ngleich 1 oder kleiner, geben Sie sofort 1 zurück. Dies ist der Basisfall. - Andernfalls geben Sie
nmultipliziert mitFACTORIAL(n - 1)zurück.
Wenn Sie in einer Zelle =FACTORIAL(5) aufrufen, geschieht Folgendes Schritt für Schritt:
FACTORIAL(5) → 5 × FACTORIAL(4)
FACTORIAL(4) → 4 × FACTORIAL(3)
FACTORIAL(3) → 3 × FACTORIAL(2)
FACTORIAL(2) → 2 × FACTORIAL(1)
FACTORIAL(1) → 1 ← Basisszenario erreicht
Excel rechnet dann rückwärts:
FACTORIAL(2) = 2 × 1 = 2
FACTORIAL(3) = 3 × 2 = 6
FACTORIAL(4) = 4 × 6 = 24
FACTORIAL(5) = 5 × 24 = 120
Das Ergebnis ist 120.
So definieren Sie eine rekursive LAMBDA-Formel im Namens-Manager
- Gehen Sie zu Formeln → Namens-Manager → Neu.
- Geben Sie im Feld Namen den Funktionsnamen ein:
FACTORIAL. - Geben Sie im Feld Bezieht sich auf die vollständige LAMBDA-Formel ein:
=LAMBDA(n; WENN(n <= 1; 1; n * FACTORIAL(n - 1)))
- Klicken Sie auf „OK“ und schließen Sie den Namens-Manager.
Geben Sie in einer beliebigen Zelle =FACTORIAL(6) ein und drücken Sie die Eingabetaste. Das Ergebnis lautet 720.
Der Name, den Sie in der Formel verwenden (
FACTORIAL), muss genau mit dem Namen übereinstimmen, den Sie im Feld „Name“ eingeben. Nur so weiß die Funktion, dass sie aufgerufen werden soll.
Rekursives LAMBDA ohne den Namens-Manager schreiben
Wenn Sie es vorziehen, alles in einer einzigen Zellformel zu belassen, aus Gründen der Portabilität oder zum Testen, können Sie die Technik der Selbstreferenzierung mit LET verwenden. Bei dieser Technik wird die Funktion selbst als Parameter übergeben:
=LET(
FACT; LAMBDA(self; n;
WENN(n <= 1;
1;
n * self(self; n - 1)
)
);
FACT(FACT; 5)
)
Die Funktion LAMBDA nimmt zwei Parameter entgegen: self (eine Kopie von sich selbst) und n (die Eingabe). Wenn sie sich selbst aufruft, übergibt sie self erneut als erstes Argument. Dadurch kann die Funktion sich selbst aufrufen, ohne dass ein extern definierter Name erforderlich ist.
Diese Technik ist etwas schwerer zu verstehen. Für den produktiven Einsatz ist der Ansatz mit dem Name Manager übersichtlicher und wartungsfreundlicher.
Praktisches Beispiel 1: SUMME von 1 zu N
Eine einfache rekursive Summe: Addieren Sie alle ganzen Zahlen von 1 bis n.
SUMTON = LAMBDA(n;
WENN(n <= 0;
0;
n + SUMTON(n - 1)
)
)
=SUMTON(10) returns 55.
Dies entspricht =n*(n+1)/2, und für dieses spezielle Problem ist die Formel übersichtlicher. Dieses Beispiel veranschaulicht jedoch das rekursive Muster in seiner verständlichsten Form, bevor wir zu Fällen übergehen, in denen es für die Rekursion tatsächlich keine äquivalente Formel gibt.
Praktisches Beispiel 2: Zählen der Tiefe verschachtelter Klammern
Angenommen, eine Zelle enthält eine Zeichenfolge wie „(((value)))“ und Sie müssen zählen, wie viele öffnende Klammern vor dem ersten Zeichen, das keine Klammer ist, vorkommen. Hierfür gibt es keine integrierte Funktion. Rekursion bietet eine elegante Lösung.
BRACKETDEPTH = LAMBDA(text;
WENN(LINKS(text; 1) <> "(";
0;
1 + BRACKETDEPTH(MID(text; 2; LÄNGE(text)))
)
)
- Basisfall: Wenn das erste Zeichen nicht
(ist, geben Sie 0 zurück. - Rekursiver Aufruf: Zählen Sie 1, und prüfen Sie dann den Rest der Zeichenkette, wobei das erste Zeichen entfernt wurde.
=BRACKETDEPTH("(((value)))") returns 3.
Dieses Problem lässt sich nicht mit einer einzigen nicht-rekursiven Formel lösen. Benötigt wird entweder Rekursion, eine Kette von Hilfssäulen oder eine VBA-Schleife. Die Rekursion ist dabei die mit Abstand prägnanteste Lösung.
Praktisches Beispiel 3: Fibonacci Sequenz
Die Fibonacci-Folge ist von Natur aus rekursiv definiert: Jede Zahl ist die Summe der beiden ihr vorangehenden Zahlen. 1, 1, 2, 3, 5, 8, 13, 21 …
FIB = LAMBDA(n;
WENN(n <= 1;
n;
FIB(n - 1) + FIB(n - 2)
)
)
=FIB(8) gibt 21 zurück
Hinweis zur Leistung: Diese Version ruft sich selbst zweimal pro Schritt auf, was zu einem exponentiellen Anstieg der Ausführungszeit führt. Bei großen n-Werten wird die Ausführung langsam. Dies ist eine bekannte Eigenschaft der naiven rekursiven Fibonacci-Sequenz und stellt kein Problem von LAMBDA dar. Bei n-Werten über etwa 20 ist eine iterative Formel unter Verwendung von SEQUENZ schneller.
Wann sollte man rekursives LAMBDA verwenden und wann nicht?
Rekursion ist das richtige Werkzeug, wenn:
- das Problem von Natur aus selbstähnlich ist, d. h., um es für n zu lösen, muss man es für n-1 lösen.
- Es gibt keine direkte Formel (z. B. das Zählen verschachtelter Strukturen oder das Durchlaufen von Textmustern mit variabler Tiefe).
- Die Tiefe ist gering die Rekursionsgrenze von Excel liegt typischerweise bei etwa 128 Ebenen. Probleme, die eine tiefere Rekursion erfordern, stoßen an diese Grenze.
Rekursion ist nicht das richtige Werkzeug, wenn:
- Es gibt eine direkte mathematische Formel (verwenden Sie stattdessen diese – sie ist schneller).
- Die Eingabedaten können umfangreich sein. Tiefe Rekursion ist in Excel langsam.
- Das Team ist mit dem Muster nicht vertraut. In solchen Fällen ist ein Ansatz mit einer Hilfssäule möglicherweise besser zu warten.
Der Basisfall ist entscheidend
Die wichtigste Regel bei rekursiven LAMBDA-Funktionen lautet: Definieren Sie immer einen Basisfall, der definitiv erreicht wird.
Der Basisfall ist die Bedingung, unter der die Funktion aufhört, sich selbst aufzurufen, und eine direkte Antwort zurückgibt. Ohne Basisfall oder mit einem, der nie erreicht wird, läuft die Funktion endlos in einer Schleife. Excel erkennt dies und gibt eine Fehlermeldung aus. Welche Basisfallbedingung falsch ist, müssen Sie jedoch selbst herausfinden.
Erstellen Sie eine Checkliste für jedes rekursive LAMBDA.
| Frage | Was ist zu überprüfen? |
|---|---|
| Gibt es einen Basisfall? | Es muss mindestens einen WENN-Zweig geben, der zurückkehrt, ohne sich selbst erneut aufzurufen |
| Ist der Basisfall erreichbar? | Der rekursive Aufruf muss die Eingabe jedes Mal in Richtung des Basisfalls verschieben |
| Verringert sich die Eingabe? | Bei einer auf Zahlen basierenden Rekursion muss sich n bei jedem Aufruf um mindestens 1 verringern |
| Wird die Zeichenkette kürzer? | Bei textbasierter Rekursion muss die Zeichenkette bei jedem Aufruf kürzer werden |
| Liegt die Tiefe unter ~128? | Wenn die maximale Eingabe mehr als 128 rekursive Aufrufe erzeugen könnte, überarbeiten Sie den Ansatz |
Praktische Tipps und häufige Fehler
| Situation | Empfehlung |
|---|---|
Die Funktion gibt #VALUE! zurück |
Überprüfen Sie, ob der Basisfall korrekt geschrieben und erreichbar ist |
Die Funktion gibt #NUM! zurück |
Excel hat die Rekursionsgrenze erreicht – die Eingabe ist zu groß oder der Basisfall ist falsch |
| Die Formel funktioniert im Test, aber nicht in der Produktion | Vergewissern Sie sich, dass der Name im Namensmanager exakt mit dem in der Formel verwendeten Namen übereinstimmt |
| Sie benötigen die Funktion in mehreren Arbeitsmappen | Kopieren Sie den Eintrag im Namensmanager in jede Arbeitsmappe oder speichern Sie ihn in Ihrer persönlichen Makro-Arbeitsmappe |
| Die Rekursion ist bei großen Eingaben langsam | Schreiben Sie die Formel nach Möglichkeit mit SEQUENCE, SCAN oder einer direkten Formel um |
| Zwei rekursive Aufrufe pro Schritt (wie bei Fibonacci) | Die Leistung nimmt schnell ab – verwenden Sie bei großen n einen schleifenbasierten Ansatz |
Warum rekursive LAMBDA-Funktionen wichtig sind
Vor der Einführung von LAMBDA erforderte jedes Problem in Excel, das eine Schleife benötigte, entweder VBA oder eine Kette von Hilfssäulen. Rekursive LAMBDA-Funktionen schließen diese Lücke bei Problemen mit einer selbstähnlichen Struktur. Sie ermöglichen es, eine Klasse von Berechnungen, für die zuvor Programmierkenntnisse erforderlich waren, als Formel auszudrücken – lesbar, überprüfbar und ohne makrofähige Arbeitsmappe teilbar.
Für die meisten Excel-Anwender sind Fakultäts- und Fibonacci-Reihen nicht von Interesse. Der springende Punkt ist: Immer wenn Sie eine Kette von Hilfssäulen erstellen, in der jede Zeile auf genau dieselbe Weise auf die darüberliegende Zeile verweist, haben Sie es mit einem rekursiven Problem zu tun. Rekursives LAMBDA kann diese gesamte Kette oft in einer einzigen Formel zusammenfassen.
Dieser Artikel ist Teil der Reihe helpme.safeoffice.de und bietet praktische Anleitungen zu Excel-Funktionen, der Gestaltung von Arbeitsmappen und Datenlösungen. Die Reihe richtet sich an Unternehmen, die nach effektiven und wartungsfreundlichen Tools suchen, die für alle verständlich sind.