Clever-Excel-Forum

Normale Version: Beschränkte Spillfähigkeit neuer Funktionen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Angenommen, ich habe folgendes (A1:A3):

A B C D
E F
G H I

Mit
B1: =GLÄTTEN(TEIL(WECHSELN(A1:A3;" ";WIEDERHOLEN(" ";99));SEQUENZ(;26;1;99);99))

wird daraus B1:AA3, also aufgeteilte Zellen, und das gleichzeitig gespillt, so dass es auch mit dem Spill A1# statt mit den Daten A1:A3 klappen würde.

Habt Ihr eine Lösung für TEXTTEILEN?

=NACHSPALTE(A1:A3;LAMBDA(a;TEXTTEILEN(a;" "))) ergibt #KALK!
=NACHZEILE(A1:A3;LAMBDA(a;TEXTTEILEN(a;" "))) ergibt #KALK!
=TEXTTEILEN(NACHZEILE(A1:A3;LAMBDA(a;a));" ") ergibt nur A;E;G
Moin,

TEXTTEILEN liefert ein Array und Excel kann nicht mit Arrays in Arrays umgehen. Folgende Formel umgeht das Problem...

PHP-Code:
B1=WENNFEHLER(WEGLASSEN(REDUCE("";$A$1:$A$3;LAMBDA(A;V;VSTAPELN(A;TEXTTEILEN(V;" "))));1);""

Gruß
Das hatten wir doch schon einmal, LCohen, bin jetzt nur zu faul zum suchen. Wink
Syntax (entscheidendes markiert):

=TEXTTEILEN(text,col_delimiter,[row_delimiter],[ignore_empty], [match_mode], [pad_with])

Also ein "echter" 2D-Splill!
Völlig verblödetes Beispiel (aber so kennst Du mich ja):
ABC
16aädägeödähöshäwsa
17d
18ged
19hsh
20ws

ZelleFormel
B16=TEXTTEILEN(A16;"ö";"ä";;;"")

Gruß Ralf
Dankeschön Euch beiden! RPP63 gab die Anregung zu meinem Beispiel: =TEXTTEILEN(TEXTVERKETTEN("°";;A1:A3);" ";"°";;;"")

maninwebs Lösung kommt dann bei einer Gesamtlänge inkl. Trennern von >32k zum Tragen. Daher sollte man daraus ein LAMBDA TEXTTEILEN.2D definieren.

Übrigens sehe ich bei maninweb in seiner Lösung erstmals VSTAPELN über einen Bereich stapelnd, statt nur einzeln stapelnd. Sehr wertvoll! (habs noch nicht kapiert und schlafe erst mal)
Ich habe nun die schöne Idee von maninweb auf automatisches TEXTTEILEN je nach Spalte oder Zeile angepasst:

Namen definieren
TEXTTEILEN.2D
bezieht sich auf
=LAMBDA(q;dd;
LET(d;WENN(WURDEAUSGELASSEN(dd);" ";dd);
WENNFEHLER(WEGLASSEN(REDUCE("";q;LAMBDA(A;V;WENN(SPALTEN(q)=1;
VSTAPELN(A;TEXTTEILEN(d&V;d;));
HSTAPELN(A;TEXTTEILEN(d&V;;d)))));1;1);"")))


Aus A1: ={"A B";"C";"D E F"} wird nun mit =TEXTTEILEN.2D(A1#;)
A B
C
D E F

Aus A1: ={"A B"."C"."D E F"} wird nun mit =TEXTTEILEN.2D(A1#;)
A C D
B   E
    F

Man könnte auch mit MTRANS/VSTAPELN statt VSTAPELN/HSTAPELN arbeiten.

Zum WURDEAUSGELASSEN irritiert mich, dass ich den Argumenttrenner (bei meiner derzeitigen Version 2210 - 15709-20000 Klick-und-Los) beim Aufruf der Funktion trotzdem angeben muss, sonst kommt #WERT!. War das nicht schon mal anders?

Bestimmt bekommt maninweb die so erweiterte Funktion noch hübscher hin.

Habt Ihr schon bemerkt, dass MS im deutschen Excel 365 aus dem Name Manager im Ribbon eine Name Manager*in gemacht hat, den Dialog dann jedoch mit Namens-Manager betitelt? Völliges "Kraut-und-Rüben" zwischen engl. und dt.
"Echt optionales" Argument: Ich habe es wiedergefunden; es muss zusätzlich zum WURDEAUSGELASSEN noch in [eckigenKlammern] spezifiziert sein.

Namen definieren
TEXTTEILEN.2D
bezieht sich auf
=LAMBDA(q;[dd];
LET(d;WENN(WURDEAUSGELASSEN(dd);" ";dd);
WENNFEHLER(WEGLASSEN(REDUCE("";q;LAMBDA(A;V;WENN(SPALTEN(q)=1;
VSTAPELN(A;TEXTTEILEN(d&V;d;));
HSTAPELN(A;TEXTTEILEN(d&V;;d)))));1;1);"")))


Aus A1: ={"A B";"C";"D E F"} wird nun mit =TEXTTEILEN.2D(A1#)
A B
C
D E F
...
(17.09.2022, 07:46)LCohen schrieb: [ -> ]Habt Ihr schon bemerkt, dass MS im deutschen Excel 365 aus dem Name Manager im Ribbon eine Name Manager*in gemacht hat, den Dialog dann jedoch mit Namens-Manager betitelt? Völliges "Kraut-und-Rüben" zwischen engl. und dt.

Yepp, haben wir!
Mourad sogar eher als ich, er hat es MS bereits vor meiner Glosse gemeldet.
Moin,

LCohen, ich denke mal, Du hast das Optimum bei Deiner TEXTTEILEN.2D schon rausgeholt.

Ansonsten hätte ich noch eine weitere LAMBDA-Funktion, die jetzt etwas anders aufteilt, als Deine.
Teilt einen Bereich auf und berücksichtigt dabei Leerzellen. Gerne optimierbar.

PHP-Code:
A1={"A-B-C-D"."E-F-G"."1-2";"H-I".""."3";"J-K-L"."M-N"."4-5"

Und die LAMBDA-Funktion:

PHP-Code:
=LAMBDA(Data;[Separator];LET(
 
T;WENN(WURDEAUSGELASSEN(Separator);" ";Separator);
 
H;NACHSPALTE(Data;LAMBDA(A;MAX(LÄNGE(WECHSELN(A;T;"")))));
 
M;MATRIXERSTELLEN(ZEILEN(Data);SPALTEN(Data);LAMBDA(X;Y;LET(N;LÄNGE(WECHSELN(INDEX(Data;X;Y);T;""));P;INDEX(H;1;Y);Q;WENN(N<>P;WENN(N<1;P-1;P-N);0);INDEX(Data;X;Y)&WIEDERHOLEN(T;Q))));
 
D;NACHZEILE(M;LAMBDA(A;TEXTVERKETTEN(T;0;A)));
 
WENNFEHLER(WEGLASSEN(REDUCE("";D;LAMBDA(A;V;VSTAPELN(A;TEXTTEILEN(V;T))));1);"")))(A1#;"-") 

Ergibt dann, mit x = leere Zellen ...

Code:
A   B   C   D   E   F   G   1   2
H   I   x   x   x   x   x   3   x
J   K   L   x   M   N   x   4   5

Gruß
Sehr schön (viele neue Funktionen verwendet)!

Meine Funktion gibt übrigens auch etwas (mit Leerzellen) zurück, wenn ZEILEN und SPALTEN von A1# beide >1. Zufällig ist es jedoch anders angeordnet.
Hallo,

LCohen, Danke. Ja, hatte ich bemerkt, dass Deine Funktion auch Leerzellen zurückgibt, wie hier unten aufgeführt.
Mir war aufgefallen, dass Du die Aufteilung in Spalten generierst, wenn mehr als eine Spalte vorhanden ist und
ich war dann davon ausgegangen, dass Du einen Grund dafür hattest. Deswegen hatte ich dann meine
gepostet mit einer anderen Anordnung. Somit gibt's beides.

Code:
A1={"A-B-C-D"."E-F-G"."1-2";"H-I".""."3";"J-K-L"."M-N"."4-5"}
Code:
A   E   1   H   x   3   J   M   4
B   F   2   I   x   x   K   N   5
C   G   x   x   x   x   L   x   x
D   x   x   x   x   x   x   x   x

Gruß
Seiten: 1 2