Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
03.12.2020, 18:22
(Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2020, 18:23 von maninweb.)
Hallo,
der nächste Game-Changer in Excel. Lambda-Funktionen. Damit lassen sich Formeln als benutzerdefinierte Funktionen anlegen.
https://techcommunity.microsoft.com/t5/e...-p/1925546Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 12.04.2014
Version(en): Office 365
03.12.2020, 18:52
(Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2020, 18:52 von shift-del.)
Moin Mourad
Ich bin noch am schmökern, aber klingt für mich wie ein aufgebohrtes LET().
Die Fähigkeit zur Rekursion könnte interessant sein.
Ich warte dann mal auf die ersten Erfahrungen der Insider-User.
EDIT:
Ganz am Ende des Artikels steht dann dass man einen Namen anlegen muss. Solche Namen-Konstrukte kann man doch auch ohne LAMBDA() erstellen.
Wir sehen uns!
... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
N'Abend,
Lambas wirken wie eine Funktion in Excel, hinter der eine Formel steht. Der Funktionsname ist dann ein Excel-Name.
Beispielsweise wird im Namensmanager der Name
MeineFunktion angelegt. Als Formel wird dann angegeben:
Code:
=LAMBDA(X;Y;SUMME(X;Y)) // kann natürlich auch was wesentlich komplizierteres sein
In Deiner Excel-Tabelle schreibst Du dann als Formel =MeineFunktion(A1;B1)
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
04.12.2020, 19:35
(Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2020, 19:36 von maninweb.)
Hallo zusammen,
habe mal einen Artikel mit einer Einführung zur LAMBDA-Funktion geschrieben.
Und die benutzerdefinierte Funktion OSTERN erstellt.
http://www.excel-ticker.de/die-lambda-fu...-in-excel/Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
04.12.2020, 20:30
(Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2020, 20:30 von LCohen.)
Mal sehen, ob die Rekursion auch Bezug auf
Vorgängerberechnung im Array erlaubt (müsste eigentlich; ist eine der häufigsten Anforderungen für eine in sich abhängige Tabelle). Dann benötigt man für dynamische Formeln keine Iterations-Aktivierung mehr, wie noch hier:
office-hilfe.com/support/threads/variabel-lange-formelbereiche-mit-xl365-am-beispiel-annuitaetischer-tilgungen.31942/Dann versuche ich mal mein Excel upzudaten.
Vorabfazit: Sehr schön, dass man nun endlich benannten Formeln Argumente mitgeben kann. Dann könnte ein Argument auch ein Array sein und die Funktion wiederum ein Array zurückgeben.
Mal sehen, ob damit endlich eine FIFO-Tabellenfunktion gelingt. Die habe ich vor 17 Jahren mal in VBA geschrieben. Dort bestanden Argument und Rückgabe aus verketteten Strings variabler Länge.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
05.12.2020, 16:16
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2020, 16:16 von LCohen.)
Aber fangen wir erst mal klein an, nach meinem Windows-Update, welches mir anscheinend immer die Office-Neuigkeiten mitbringt (XLWeb hat LAMBDA heute noch nicht):
=ESteuer2004(zvE;Splitting) mit Splitting nein = 1, ja = 2 (Argument optional/wertvorbesetzt habe ich noch nicht erforscht)
Benenne ESteuer2004 mit meiner uralten Funktion:
=LAMBDA(x;y;LET(x;x/y;y*GANZZAHL(SUMMENPRODUKT( (x>={7665.12740.52152})* (x<{12740.52152.99999999999})*( (x-{7664.12739.0})%%^2*{793,1.265,78.0}+ (x-{7664.12739.0})%*{16.24,05.45}+ {0.1016.-8845})))))
Anmerkung: Diese Funktion ist nicht auf den Euro akkurat, da z.B. die damals üblichen sprungfixen Berechnungen (alle 54 oder 18 Euro oder so ähnlich) nicht drin sind. Außerdem schließe ich nicht aus, dass im amtlichen PAP bei Zwischenstufen (anders) gerundet wird.
=ESteuer2004(40000;1) ergibt 9457 (Einzel-Durchschnittsteuer 23,9%)
=ESteuer2004(40000;2) ergibt 5804 (Splitting-Durchschnittsteuer 14,5%)
=ESteuer2004(SEQUENZ(101;;0;1000);1) ergibt leider heute noch Unsinn statt einer dynamischen Steuerliste für zvE 0, 1000, 2000, ..., 100000. Die Sequenz wird ungefragt einfach summiert.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
06.12.2020, 03:06
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2020, 03:10 von LCohen.)
https://techcommunity.microsoft.com/t5/e...-p/1925546zeigt ein Rekursionsbeispiel. Das habe ich ein bisschen abgewandelt:
D3:
=WEXELN(A3;B3;C3) mit
abcdefg adf xxx xbcxexg als Inhalte der 4 Zellen.
WEXELN wird definiert mit
=LAMBDA(textString;changeChars;replaceChars;
WENN(changeChars=""; textString;
WEXELN(
WECHSELN(textString; LINKS(changeChars; 1); LINKS(replaceChars; 1));
RECHTS(changeChars; LÄNGE(changeChars)-1);
RECHTS(replaceChars; LÄNGE(replaceChars)-1)
)))Ich kann dieses nun endlich mögliche LISTEWECHSELN auch
partiell zum Eliminieren, partiell zum Wechseln verwenden:
D3:
=WECHSELN(WEXELN(A3;B3;C3);"x";) mit
abcdefg adf xyx bcyeg als Inhalte der 4 Zellen.
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
06.12.2020, 15:31
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2020, 15:32 von maninweb.)
Hallo,
@LCohen: WEXELN gefällt mir. Habe mal ein bißchen mit Deiner Steuerformel rumgespielt. Sieht so aus, als würde das Summenprodukt die Array-isierung killen.
Vielleicht gibt's da eine andere Lösung.
Code:
=LET(zvE;{40000;41000};Splitting;1;R;SEQUENZ(ZEILEN(zvE));Y;INDEX(zvE;R;1)/Splitting;
Z;Splitting*GANZZAHL(SUMMENPRODUKT((INDEX(Y;R;1)>={7665.12740.52152})*(INDEX(Y;R;1)<{12740.52152.99999999999})*((
INDEX(Y;R;1)-{7664.12739.0})%%^2*{793,1.265,78.0}+(INDEX(Y;R;1)-{7664.12739.0})%*{16.24,05.45}+{0.1016.-8845})));Y)
=LET(Y;{40000;41000};R;SEQUENZ(ZEILEN(Y));Z;SUMMENPRODUKT((INDEX(Y;R;1)>={7665.12740.52152})*(INDEX(Y;R;1)<{12740.52152.99999999999}));Z)
Parameter in LAMBDAs können optional sein, müssen aber angegeben werden, z.B. UDF(X;Y;Z) würde dann UDF(X;;). Empfiehlt sich dann den Fall abzufangen.
Ich habe mir mal ein paar Array-Funktionen erstellt
ARRAY.CREATE,
ARRAY.REVERSE sowie
ARRAY.REMOVE.FIRSTN und ARRAY.REMOVE.LASTN.
Werden mir dann später als Basis für mehr Funktionen dienen.
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
07.12.2020, 19:20
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2020, 19:20 von LCohen.)
Das Wort Splitting erinnert gleich an SPLITTEN (Gegenfunktion zu TEXTVERKETTEN):=SPLITTEN(A1) mitNamen Definieren SPLITTEN bezieht sich auf:=LAMBDA(TextString;XMLFILTERN("<a><b>"&WECHSELN(TextString;" ";"</b><b>")&"</b></a>";"//b"))Verwendete Quelle für XMLFILTERN als SPLITTEN:techcommunity.microsoft.com/t5/excel/counting-dates/m-p/1424487Eine sinnvolle Funktion mit Argument, bevor sie dann allgemein als eigene Funktion verfügbar wird.Erweiterung:Aufteilung in Zeilen (quer=0) oder Spalten (quer=1): =SPLITTEN(A1;;) oder =SPLITTEN(A1;1;) sowieDelimiter (Default Leerzeichen, sonst z.B. "/"): =SPLITTEN(A1;;"/") oder =SPLITTEN(A1;1;"/")alsNamen Definieren SPLITTEN bezieht sich auf:=LAMBDA(Txt;quer;Trenn;
LET(Txt;Txt;quer;quer;y;Trenn;x;XMLFILTERN("<a><b>"&WECHSELN(Txt;WENN(y="";" ";y);"</b><b>")&"</b></a>";"//b");
WENN(quer;MTRANS(x);x)))____________(Deine 4 ARRAY.xxx schaue ich mir noch an)
maninweb, sehr schöne Erweiterungen!
Was ich immer bei MTRANS vermisst habe, war ein "Weiterdrehen": Denn mehrfache Verwendung schaltet immer nur zwischen Zeilen- und Spaltenorientierung hin- und her (absolut sinnvoll, weil es um das Verwenden von nur 2 möglichen Dimensionen in Excel-Arrays geht). Schick wäre aber:
MTRANS4
mit den Zuständen
Zustand 0:
1 2 3
4 5 6
Zustand 1 (MTRANS):
1 4
2 5
3 6
Zustand 2 (Dein .REVERSE):
3 2 1
6 5 4
Zustand 3 (.REVERSE zu MTRANS):
3 6
2 5
1 4
... und weiter mit MTRANS8:
Zustand 4 (.REVERSE der verbleibenden Dimension):
4 5 6
1 2 3
Zustände 5-7 weiter ggü Zustand 4 (analog zu Zustand 1-3).
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
z.B. .APPEND ist sehr schön. Damit können (evtl. ohne weiteres) die Unterschiede zweier Arrays mit EINDEUTIG sofort zurückgegeben werden.