MAP, REDUCE, SCAN und MATRIXERSTELLEN: Ein LAMBDA wird auf ein Array angewendet. Wann ist das wirklich nötig?
FAQ — Welche Fragen werden in diesem Artikel beantwortet?
Q: Was leisten diese vier Funktionen?
A: Sie sind Treiber: Jede nimmt einen Vorgang, den du definierst, und wendet ihn auf ein Array an. MAP formt jedes Element um und gibt ein Array gleicher Form zurück. REDUCE fasst ein Array zu einem einzigen akkumulierten Wert zusammen. SCAN führt die gleiche Akkumulation durch, gibt das Ergebnis jedoch in jedem Schritt zurück. MATRIXERSTELLEN erstellt ein Array beliebiger Größe und berechnet jede Zelle aus ihrer Zeilen- und Spaltennummer.
Q: Was ist ein LAMBDA, und warum wird es benötigt?
A: Die Formel LAMBDA hat die Eigenschaft, dass du deine Eingaben benennen kannst. Wenn du zum Beispiel LAMBDA(x; x * 0,05) eingibst, wird x mit x * 0,05 zurückgegeben. Allein bewirkt es nichts; es braucht etwas, das es aufruft. Genau das sind diese vier Funktionen: Sie rufen Ihr LAMBDA wiederholt über deine Daten auf. Teil 1 ist eine kurze Auffrischung.
Q: Wann brauche ich diese wirklich statt einer einfachen überlaufenden Formel?
A: Seltener, als man denkt. Und das ist der wichtigste Punkt dieses Artikels. Eine direkte Array-Formel wie =A2:A100*B2:B100 läuft bereits von selbst über den ganzen Bereich. Zu diesen Funktionen greifst du nur, wenn die Logik pro Element für eine direkte Formel zu komplex ist, wenn du ein laufendes oder akkumuliertes Ergebnis benötigst oder wenn du ein Array aus seinen Koordinaten erstellen möchtest. Teil 8 zieht die Grenze.
Q: In welchen Excel-Versionen sind sie verfügbar?
A: Die Funktionen MAP, REDUCE, SCAN und MATRIXERSTELLEN sowie die Funktionen LAMBDA, NACHZEILE und NACHSPALTE sind in Microsoft 365, in Excel für das Web und in Excel 2024 (Windows und Mac) verfügbar. In Excel 2021, 2019 und 2016 sind sie nicht enthalten und liefern #NAME?.
Q: Was ist der Unterschied zwischen REDUCE und SCAN?
A: Sie nutzen denselben Akkumulator und dasselbe LAMBDA. REDUCE gibt nur den Endwert zurück, also den Endpunkt. SCAN gibt dagegen den Wert nach jedem Schritt zurück, also den gesamten Weg. Ein laufender Wert ist SCAN; sein Schlusswert allein ist REDUCE.
Der größte Teil der Excel-Funktionsbibliothek ist erster Ordnung. Eine Funktion nimmt Werte auf und gibt einen Wert zurück. Diese kleine Familie ist anders. MAP, REDUCE, SCAN und MATRIXERSTELLEN sind Funktionen höherer Ordnung, sie nehmen eine Funktion als Argument und wenden sie auf ein Array an. Dadurch wird das, was eine Formel ausdrücken kann, grundlegend verändert: Anstatt eine Berechnung einmal auszuschreiben, übergibst du diese Funktionen der Berechnung als LAMBDA und lässt sie über deine Daten laufen.
Das macht sie zum mächtigsten, aber auch am leichtesten übernutzen Teil des Dynamik-Array-Werkzeugs. Ein gutes Verständnis dieser Konzepte lohnt sich, denn es sagt dir, wann du zu ihnen greifen solltest und, ebenso wichtig, wann eine einfache überlaufende Formel die bessere Antwort ist. Dieser Artikel erklärt die Ideen hinter den vier Funktionen und schließt mit dieser Abwägung.
Teil 1: Eine kurze Auffrischung zu LAMBDA
Da alle vier Funktionen ein LAMBDAverwenden, lohnen sich dreißig Sekunden dazu. Ein LAMBDA verwandelt eine Berechnung in eine wiederverwendbare Funktion, indem es ihre Eingaben benennt:
=LAMBDA(x; x * 0,05)
Das definiert eine Funktion, die eine Eingabe x nimmt und x*0,05 zurückgibt. In einer Zelle allein bewirkt sie nichts Nützliches; da sie noch keinen Wert zum Arbeiten hat. Nützlich wird sie auf zwei Wegen: Entweder du gibst ihr im Namens-Manager einen Namen und rufst sie wie jede eingebaute Funktion auf, oder du übergibst sie einem Treiber wie MAP, der die Werte liefert. Die vier Funktionen dieses Artikels sind diese Treiber. Eine tiefere Behandlung von LAMBDA selbst, einschließlich Rekursion, bietet der Artikel Rekursive LAMBDA-Funktionen in Excel.
Teil 2: Die Familie. Es gibt vier Treiber. Sie sind nach dem Rückgabewert geordnet.
Am einfachsten behält man die vier im Kopf, wenn man sich auf die Form dessen konzentriert, was jede zurückgibt.
MAP nimmt ein Array und gibt ein Array gleicher Form zurück, wobei jedes Element umgeformt wird. REDUCE nimmt ein Array und gibt einen Wert zurück, das Ganze gebündelt. SCAN nimmt ein Array und gibt ein Array gleicher Form zurück, wobei jedes Element ist das bislang akkumulierte Ergebnis. MATRIXERSTELLEN nimmt gar kein Eingabe-Array. Es nimmt eine Zeilen- und Spaltenzahl entgegen und erstellt ein Gitter, wobei jede Zelle aus ihrer Position berechnet wird. Zwei nahe Verwandte runden den Satz ab: NACHZEILE und NACHSPALTE führen ein LAMBDA auf jede ganze Zeile oder Spalte aus statt auf jede Zelle und geben ein Ergebnis pro Zeile oder Spalte zurück.
Teil 3: Die Daten, mit denen wir arbeiten
Die folgenden Beispiele verwenden eine einzelne Reihe monatlicher Umsätze. Diese sind 8.000 €, 12.000 €, 15.000 €, 9.500 €, 18.000 € und 11.000 €. Sie sind in einer Excel-Tabelle namens Umsätze zu finden. Ein benannter Bereich oder Tabellenbezug hält die Formeln lesbar, wie in Warum jeder Datensatz eine Excel-Tabelle sein sollte dargelegt.
Teil 4: MAP formt jedes Element um
MAP wendet ein LAMBDA auf jedes Element eines Arrays an und gibt ein neues Array gleicher Form zurück.
=MAP(Matrix1; [Matrix2]; ...; lambda)
Angenommen, die Provision ist wie folgt gestaffelt: 5 % auf Umsätze bis 10.000 €, 10 % darüber. Diese Formel wird auf jeden Monat angewendet:
=MAP(Umsätze; LAMBDA(u; WENN(u>10000; u*0,1; u*0,05)))
Das LAMBDA erhält den Wert eines Monats als u und gibt dessen Provision zurück. MAP lässt es über die ganze Spalte laufen und überläuft das Ergebnis.
Hier ist die ehrliche Einschränkung, die diese ganze Familie bestimmt. Eine einfache elementweise Rechnung benötigt kein MAP, die Formel =Umsätze*0,05 läuft bereits von selbst über den Bereich. MAP lohnt sich, wenn die Logik pro Element reicher ist, als es mit einer direkten Array-Formel möglich ist: mehrere Bedingungen, ein LET mit Zwischenschritten oder ein benanntes LAMBDA, das du anwenden möchtest. Wenn eine einfache Array-Formel die Aufgabe löst, ziehe diese vor.
Teil 5: Hier geht es um "Reduce" und "Scan". Diese Funktionen werden über ein Array genutzt. Dabei wird etwas akkumuliert.
Die beiden verstehen sich am besten zusammen, denn sie haben einen gemeinsamen Mechanismus und unterscheiden sich in genau einem Punkt. Beide durchlaufen ein Array, also so eine Art Verzeichnis, und tragen dabei einen Akkumulator, also einen laufenden Wert, der von einem Element zum nächsten weitergereicht wird. Beide nehmen außerdem ein LAMBDA(akkumulator; wert; ...). Der Unterschied liegt darin, was sie zurückgeben.
=REDUCE([startwert]; array; lambda(akkumulator; wert; körper))
=SCAN([startwert]; array; lambda(akkumulator; wert; körper))
REDUCE gibt nur den letzten Akkumulator zurück, den Endpunkt:
=REDUCE(0; Umsätze; LAMBDA(akku; wert; akku+wert)) ' ergibt 73.500
SCAN gibt den Akkumulator nach jedem Schritt zurück, den ganzen Weg:
=SCAN(0; Umsätze; LAMBDA(akku; wert; akku+wert)) ' ergibt 8.000; 20.000; 35.000; 44.500; 62.500; 73.500
Hier liegt der Unterschied: Der laufende Wert ist SCAN, der Schlusswert allein ist REDUCE. Der Startwert ist sozusagen der Ausgangspunkt des Akkumulators. Wenn du eine Summe hast, setzt du sie einfach auf 0. Und wenn du ein Textergebnis bauen willst, dann schreibst du "".
Der eigentliche Wert von REDUCE liegt darin, dass es SUMME verallgemeinert. Summieren ist nur die einfachste Art der Akkumulation, und der Akkumulator kann jede Regel tragen. Wenn du eine Reihe monatlicher Wachstumsraten zu einem einzigen kumulierten Faktor verknüpfen willst, was keine einzelne native Funktion sauber leistet, multipliziere einfach den Akkumulator hinein, beginnend bei 1:
=REDUCE(1; Wachstumsraten; LAMBDA(akku; r; akku*(1+r))) ' z. B. +8 %, +5 %, -3 %, +6 % → 1,166
Teil 6: MATRIXERSTELLEN, bedeutet wir erstellen ein Array aus seinen Koordinaten.
MATRIXERSTELLEN ist ein ganz besonderes Beispiel, denn es nimmt kein Quell-Array. Stattdessen geben Sie einfach eine Größe ein, und ein LAMBDA rechnet dann jede Zelle aus ihrer Zeilen- und Spaltennummer aus.
=MATRIXERSTELLEN(zeilen; spalten; lambda(zeile; spalte; körper))
Das LAMBDA erhält Zeilen- und Spaltenindex der aktuellen Zelle. Ein Vier-mal-vier-Einmaleins ist einfach das Produkt der beiden:
=MATRIXERSTELLEN(4; 4; LAMBDA(z; s; z*s))
Die Zelle in Zeile 3, Spalte 4 ist 3*4 = 12. In der Praxis ist diese koordinatengesteuerte Konstruktion der Weg, ein Szenariogitter ohne Datentabelle zu erzeugen, etwa die Rate für jede Kombination aus Zinssatz und Laufzeit, einen Kalender zu legen oder eine strukturierte Wertefolge zu erzeugen. Wenn du mal einen Wert aus einer Zelle berechnen musst, der davon abhängt, wo die Zelle sitzt, dann ist die Funktion MATRIXERSTELLEN genau das richtige Werkzeug für dich.
Teil 7: Zusammensetzen und wiederverwenden mit LET und benannte LAMBDAs
Mit zwei Techniken werden aus diesen Funktionen wartbare Werkzeuge statt kluger Einzeiler. Die erste ist LET. Wenn du innerhalb eines LAMBDA den Zwischenschritt benennst, kannst du eine komplexe Berechnung pro Element lesbar statt in einem dichten Nest durchführen. Das wird auch in LET: übersichtlichere, schnellere Formeln erklärt.
Die zweite Möglichkeit ist die Wiederverwendung. Wenn sich ein LAMBDA bewährt, muss es nicht in einer Formel begraben bleiben. Wenn du das mal im Namens-Manager definierst, also so: Provision = LAMBDA(u; WENN(u>10000; u*0,1; u*0,05)), dann hast du eine Funktion, die du überall in der Arbeitsmappe aufrufen kannst, auch innerhalb von MAP: =MAP(Umsätze; Provision). Hier trifft das Werkzeug auf das weitere Ökosystem. Die Funktionen höherer Ordnung wenden die Logik an, und ein benanntes LAMBDA lässt ein Team diese Logik hinter einem freundlichen Namen teilen und pflegen. Ich möchte dir gerne mehr zu den Mechanik und Fallstricke des Benennens erzählen. Schau dir doch mal den Artikel Der Namens-Manager: benannte Bereiche, Vorteile und Fallstricke an.
Teil 8: Die richtige Abstraktionsebene finden
Das ist die Abwägung, auf die der Artikel hingearbeitet hat. Die Frage, die sich dabei stellt, ist nicht "welche der vier?", sondern "brauche ich überhaupt eine, und auf welcher Ebene?"
Wenn du magst, kannst du gerne zuerst zu einer direkten Array-Formel greifen. Wenn der Vorgang elementar und einfach ist, dann kann Excel ihn auch direkt übernehmen. Zum Beispiel diese Formeln hier: =A2:A100*B2:B100 und =WENN(Umsätze>0; "Gewinn"; "Verlust"). Und das Beste daran: Es ist kein Treiber nötig! Das ist die klarste und wartbarste Option und sollte der Standard sein. Wenn du mehr über das zugrunde liegende Überlaufverhalten erfahren willst, schau doch mal bei Dynamische Bereiche mit FILTER, SORTIEREN, EINDEUTIG und SEQUENZ vorbei.
Wenn eine direkte Formel die Aufgabe nicht ausdrücken kann, kannst du zu den Funktionen höherer Ordnung aufsteigen. Die Logik pro Element kann schon mal komplex oder mehrstufig sein. Du brauchst dann ein laufendes oder akkumuliertes Ergebnis (SCAN, REDUCE), oder du erstellst ein Array aus seinen Koordinaten (MATRIXERSTELLEN). Wir müssen einfach abwarten und schauen, ob die Alternative ein Wildwuchs aus Hilfsspalten wäre. Wenn ja, wäre eine dieser Funktionen die sauberere Antwort.
Wenn du die Logik in ein benanntes LAMBDA überführst, kannst du das machen, wenn sich dieselbe Berechnung in der Arbeitsmappe wiederholt, wenn du eine wiederverwendbare Funktion mit einem sinnvollen Namen haben möchtest oder wenn ein Team sie teilen und pflegen muss. Die Funktion höherer Ordnung wendet weiterhin an; der Name gibt der Logik ein Zuhause.
Was die Verfügbarkeit angeht, so folgt diese Familie dem modernen Dynamik-Array-Muster: Microsoft 365, Excel für das Web und das dauerhafte Excel 2024, aber nicht Excel 2021 oder älter, wo sie #NAME? liefern. Wenn du das vollständige Bild sehen willst, schau dir doch mal Excel 365 im Vergleich zu älteren Versionen an. Wenn's um richtig schwere Iteration oder das Einlesen externer Daten geht, sind Power Query oder VBA die Spezialwerkzeuge der Wahl. Diese Funktionen sind für die formelgesteuerte Arbeit im Blatt gedacht, das sich selbst aktualisierende Muster aus Excel-Berichte mit dynamischen Matrizen und Tabellen automatisieren anzeigt.
Teil 9: Häufige Fehlerbilder
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
#NAME? oder _xlfn.MAP |
In Excel 2021 oder älter geöffnet | Eine direkte Formel oder ein Vorgehen für ältere Versionen; siehe Teil 8 |
#WERT! — „Falsche Parameter" |
Das LAMBDA hat die falsche Parameterzahl |
Parameter an den Treiber anpassen (MAP einen je Array; REDUCE/SCAN Akkumulator + Wert) |
Eine falsche REDUCE-Summe |
Der startwert passt nicht zum Vorgang |
Eine Summe bei 0, ein Produkt bei 1, einen Textaufbau bei "" beginnen |
#KALK! oder ein leeres Ergebnis |
Das LAMBDA gab nichts zurück, oder ein Array war leer |
LAMBDA-Körper und Quellbereich prüfen |
#ÜBERLAUF! |
Etwas blockiert den Überlaufbereich des Ergebnisses | Die Zellen leeren, die das Ergebnis füllen muss |
| Langsame Neuberechnung | Ein LAMBDA über ein sehr großes Array iteriert |
Wo eine direkte Array-Formel genügt, diese vorziehen; den Bereich begrenzen |
| Überkonstruierte Formel | MAP für Arithmetik genutzt, die schon überläuft |
Durch die einfache Array-Formel ersetzen (=Umsätze*0,05) |
Wenn ein verschachteltes LAMBDA nicht tut, was es soll, gehe die Formelauswertung Schritt für Schritt durch — siehe Formeln für ein besseres Verstehen analysieren.
Zusammenfassung
Mit diesen vier Funktionen kannst du das Arbeiten mit höheren Ordnungen in Tabellenblätter integrieren. Du erhältst ein LAMBDA und kannst es auf ein Array anwenden.
MAPformt jedes Element um und gibt ein Array gleicher Form zurück; nutze es, wenn die Logik pro Element für eine einfache überlaufende Formel zu reich ist.REDUCEbündelt ein Array zu einem akkumulierten Wert,SUMME, verallgemeinert auf jede Regel, etwa das Verketten von Wachstumsraten.SCANteilt den Akkumulator vonREDUCE, gibt aber jeden Schritt zurück, der laufende Wert zuREDUCEs Schlusszahl.MATRIXERSTELLENbaut ein Gitter beliebiger Größe und berechnet jede Zelle aus ihrer Zeilen- und Spaltennummer.- Wähle die Abstraktionsebene bewusst: zuerst eine direkte Array-Formel, dann eine Funktion höherer Ordnung, wenn die Logik es verlangt, ein benanntes
LAMBDA, wenn es wiederverwendet werden soll. - Sie laufen in Microsoft 365, Excel für das Web und Excel 2024, nicht in Excel 2021 oder älter, wo sie
#NAME?liefern.
Das Prinzip ist eigentlich ganz einfach: Passe das Werkzeug zum Problem an, greife zum einfachsten Ausdruck, der funktioniert, und wende die mächtige Abstraktion erst an, wenn eine einfachere Methode die Aufgabe nicht lösen kann.
Siehe auch: Rekursive LAMBDA-Funktionen in Excel für das LAMBDA, das diese Funktionen antreiben, Dynamische Bereiche mit FILTER, SORTIEREN, EINDEUTIG und SEQUENZ für das Überlaufverhalten, auf dem sie aufbauen, LET: übersichtlichere, schnellere Formeln für ein lesbares komplexes LAMBDA, Der Namens-Manager: benannte Bereiche, Vorteile und Fallstricke für das Verwandeln eines LAMBDA in eine wiederverwendbare benannte Funktion, Excel-Berichte mit dynamischen Matrizen und Tabellen automatisieren für das sich selbst aktualisierende Berichtsmuster, und Excel 365 im Vergleich zu älteren Versionen für das vollständige Verfügbarkeitsbild.
Dieser Artikel ist Teil der helpme.safeoffice.de-Reihe, die praxisnahe Anleitungen zu Excel-Funktionen, Arbeitsmappen-Modellierung und Datenlösungen bietet. Die Reihe richtet sich an Unternehmen, die wirksame, wartbare Werkzeuge möchten, die jeder verstehen kann.