Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[LAMBDA] TEXTTEILEN.2D in klassischem Kleid
#1
TEXTTEILEN.2D beziehtSichAuf

=LAMBDA(x;[tt];[nn];LET(
t;WENN(WURDEAUSGELASSEN(tt);" ";tt);
n;WENN(WURDEAUSGELASSEN(nn);MAX(1+LÄNGE(x)-LÄNGE(WECHSELN(x;t;)));nn);
f;LAMBDA(x;n;o;FINDEN("#";WECHSELN(t&x&"#";t;"#";SEQUENZ(;n)+o)));
TEIL(x;f(x;n;0);f(x;n;1)-f(x;n;0))))


findet sich in 
office-hilfe.com/support/threads/string-oder-csv-mit-trennzeichen-per-formel-auf-zellen-aufteilen.22254/
und zwar nach der dort erklärten GLÄWEXWDH- als unbegrenzte FINDEN-Variante.

=TEXTTEILEN.2D(A1:A9) teilt den Bereich spaltenweise mit " " als Trenner auf, und zwar mit der Anzahl der maximalen Trenner in einer Zelle des Bereichs.

=TEXTTEILEN.2D(A1:A9;;3) tut dies nur für die ersten 3 "Felder".

=TEXTTEILEN.2D(A1:A9;"-") nimmt als Trenner den Strich.

=TEXTTEILEN.2D(A1:A9;"-";2) nimmt als Trenner den Strich und gibt die ersten beiden Felder zurück.

Man könnte die Funktion außer dem impliziten Wiedergeben vom Anfang her auch noch um das vom Ende her oder irgendwo in der Mitte erweitern.

Das Thema wurde schon in clever-excel-forum.de/Thread-Beschraenkte-Spillfaehigkeit-neuer-Funktionen behandelt, aber man findet diese doch wichtige Funktion dort nicht so schnell wieder. Daher hier jetzt mit eigenem Beitrag.
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • maninweb
Antworten Top
#2
Die Rückgabe einer festen Anzahl Einträge von rechts - auch bei "unterschiedlich langen Datensätzen" (also Strings mit variabler Anzahl Trenner) - klappt dann wie folgt:

TEXTTEILEN.2D beziehtSichAuf

=LAMBDA(xx;[tt];[nn];LET(
t;WENN(WURDEAUSGELASSEN(tt);" ";tt);
m;1+LÄNGE(xx)-LÄNGE(WECHSELN(xx;t;));
k;MAX(m);
n;WENN(WURDEAUSGELASSEN(nn)+(nn<1);k;nn);
x;WENN(nn<0;WIEDERHOLEN(t;k-m);"")&xx;
f;LAMBDA(x;n;o;FINDEN("#";WECHSELN(t&x&"#";t;"#";SEQUENZ(;n)+o)));
u;TEIL(x;f(x;n;0);f(x;n;1)-f(x;n;0));
WENN(nn<0;WEGLASSEN(u;;k+nn);u)))


=TEXTTEILEN.2D(A1:A3;;-4) ergibt die 4 letzten "Felder"; aus den 3 Strings

1 2 3 4 5 6
1 2 3 4
1 2 3 4 5

wird also zurückgegeben in eigenen Spalten (bzw. Zellen):

3 4 5 6
1 2 3 4
2 3 4 5

Die drei fetten Stellen zeigen einen unterschiedlichen Weg des Codes. Das ist unbefriedigend, da von der Logik her fehlerträchtig (schlimmer Spaghetticode). Vielleicht bekomme ich das irgendwie noch sauberer hin. Es wird dann aber wohl auch länger.

Wie schon in #1 trennen 2 Trenner hintereinander auch hier beabsichtigt 2mal, also mit einem Leereintrag. Will man das vermeiden, muss man statt A1:A9 halt GLÄTTEN(A1:A9) oder die bei einem anderen Trenner gegebene Maßnahme verwenden.

Mit der Zählung der Felder nun auch von rechts (mit dem "Minus-nn") ist die schwierigste Behandlung erledigt. Den Rest kann man mit WEGLASSEN und/oder SPALTENWAHL um die Funktion herum erledigen:

=WEGLASSEN(TEXTTEILEN.2D(A1:A9;;-2);;-1) ergibt das vorletzte "Feld".
=SPALTENWAHL(TEXTTEILEN.2D(A1:A9;;-2);1) ergibt ebenfalls das vorletzte "Feld".
Antworten Top
#3
Elex hat herausgefunden, dass TEXTTEILEN auch 2D funktioniert, wenn man es mit TEXTVOR und/oder TEXTNACH kombiniert. Damit sind meine langen Formeln vermutlich hinfällig.

clever-excel-forum.de/Thread-VBA-Split-Arrays-nach-VLOOKUP-Fkt-sortieren
Antworten Top
#4
Ich habe es jetzt auch mit TEXTVOR und TEXTNACH realisiert. Der Trenner darf mehr als ein Zeichen haben.

=LAMBDA(x;t;LET(y;t&x&t;m;LÄNGE(t);
n;MAX(NACHZEILE(y;LAMBDA(a;(LÄNGE(a)-LÄNGE(WECHSELN(a;t;))-m)/m)));
WENNFEHLER(TEXTNACH(TEXTVOR(y;t;SEQUENZ(;n;2));t;SEQUENZ(;n;1));"")))


Die Rechtsbündigkeit ist jetzt genauso wie eine beschränkte Anzahl der Spalten nicht enthalten.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste