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.

[Excel] Neue Text-Funktionen. Vielleicht. Demnächst.
#31
Hier ein praktikabler "Shorty" ohne LET und LAMBDA:

A1:A4:
Du bist
ein echter
Array-Split
aus nem Vektor

C1: =TEXTTRENNEN(TEXTVERKETTEN(";";;A1:A4);" ";";") ergibt
Du_________ bist__ #NV
ein________ echter #NV
Array-Split #NV___ #NV
aus________ nem___ Vektor


Der reicht für 90% der typischen Trennungen aus. Bei "ungleichen Satzlängen" gern noch mit WENNFEHLER(...;"") drumrum. Aber: Schwerwiegende Einschränkung, siehe unten!

Steht A1:A4: statt dessen in A1:D1:, und ist die Orientierung der gewünschten Matrix entsprechend gedreht, muss es - ohne Änderung der Delimiter ggü oben - heißen:

A3: =MTRANS(TEXTTRENNEN(TEXTVERKETTEN(";";;A1:D1);" ";";"))

___________

=LÄNGE(TEXTVERKETTEN(";";;SEQUENZ(3387;;1;2)&" "&SEQUENZ(3387;;2;2))) ergibt 32762 und geht gerade noch durch. Bei =TEXTTRENNEN(TEXTVERKETTEN(";";;SEQUENZ(3388;;1;2)&" "&SEQUENZ(3388;;2;2));" ";";") ist also Sense. Das ist halt das Problem mit einem gebauten Einzelstring.

Mit =SPLIT(SEQUENZ(999999;;1;2)&" "&SEQUENZ(999999;;2;2);" ") (Code 2: 9 Sekunden, Code 3: 5 Sekunden) hingegen gibt es kein Problem. An dem Geschwindigkeitsvorteil sieht man, dass interne Tabellenfunktionen nicht zu schlagen sind, dass aber auch selbst definierte LAMBDAs nicht schwerwiegend abfallen.
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • RPP63
Antworten Top
#32
Sehr schön!
Ich habe mir gestattet, noch ein wenig zu erweitern.
Trennzeichen neben Leerzeichen noch das "-" mittels Matrix-Konstante {" ";"-"}
Wegfall des #NV durch pad_with ""
=TEXTTRENNEN(TEXTVERKETTEN(";";;A1:A4);{" ";"-"};";";;"")

ABCDE
1Du bistDubist
2ein echtereinechter
3Array-SplitArraySplit
4aus nem VektorausnemVektor

ZelleFormel
C1=TEXTTRENNEN(TEXTVERKETTEN(";";;A1:A4);{" ";"-"};";";;"")
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • LCohen
Antworten Top
#33
Stimmt, das "Pad_with" vergesse ich zZt immer noch. Aber wenn einen der Kollege drauf hinweist, wird das Gehirn es wohl in Zukunft erinnern ;)

Rausgelöst aus dem LAMBDA Code 3 (5 Sekunden) lande ich bei 3 Sekunden mit dem hart geschriebenen
=TEXTNACH(TEXTVOR(" "&SEQUENZ(999999;;1;2)&" "&SEQUENZ(999999;;2;2)&" ";" ";{2.3});" ";{1.2})
Antworten Top
#34
Moin,

anbei ein Beispiel, wie ein Bereich so getrennt werden kann, dass dann die Spalten in jeweils nebeneinander liegende und getrennte Zielbereiche getrennt werden.
CHOOSEROWS löst übrigens das Problem, dass sich INDEX(vnMatrix;1;1):INDEX(vnMatrix;1;N) mit N = Spaltenanzahl in einer Formel mit dynamischen
Zwischenwerten nicht berechnen lässt.

Code:
 =LET(Daten;$A$2:$B$5;Trennzeichen;{"-";" "};
  vnRows;ZEILEN(Daten);
  vnColumns;SPALTEN(Daten);
  vnScan;SCAN(0;Daten;LAMBDA(V;A;1+SUMME(LÄNGE(A)-LÄNGE(WECHSELN(A;Trennzeichen;"")))));
  vnMax;NACHSPALTE(vnScan;LAMBDA(A;MAX(A)));
  vnMatrix;MATRIXERSTELLEN(vnRows;vnColumns;LAMBDA(X;Y;LET(Z;INDEX(vnMax;1;Y)-INDEX(vnScan;X;Y);INDEX(Daten;X;Y)&WENN(Z>0;WIEDERHOLEN(INDEX(Trennzeichen;1;1);Z);""))));
  vnString;TEXTVERKETTEN(ZEICHEN(1);WAHR;MATRIXERSTELLEN(vnRows;1;LAMBDA(X;Y;TEXTVERKETTEN(INDEX(Trennzeichen;1;1);WAHR;CHOOSEROWS(vnMatrix;X)))));
  TEXTTRENNEN(vnString;Trennzeichen;ZEICHEN(1)))

Vielleicht gibt's zu dieser Formel ja noch eine einfachere Lösung. Eine Lösung mit VSTACK und HSTACK habe ich erstmal nicht gefunden,
ohne jetzt eine Rekursion anlegen zu müssen.

   

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • LCohen
Antworten Top
#35
TEXTVERKETTEN dürfte ohne NACHZEILE immer ein Bottleneck sein (max. Stringlänge 2^15 Zeichen). Man will ja schon eine Funktion über alle 2^20 Zeilen funktionieren sehen, so wie es eingebaute Funktionen ja auch können.

Eine Rekursion mit VSTACK habe ich auch in anderem Zusammenhang vor, wo SCAN enthalten ist. Denn SCAN erlaubt ebenfalls nur einen Startwert anstelle eines Startvektors. Mal sehen, wie die Rekursion beschränkt ist.

EDIT: Habe Deine Funktion eben eingegeben. Sehr cool. Simuliertes 3 D! Bei gleich breiten Teilen könnte man dann auch "im Raum" mischen.
Antworten Top
#36
Moin,

ein Experiment, siehe folgende Formeln, wo $ das Zeichen 32.767 ist.

Code:
A1=LET(U;WIEDERHOLEN(TEXTKETTE(SEQUENZ(10;1;0))&"-";ABRUNDEN(2^15/11;0));V;U&"01234567"&"$"&"ABCDEFGH";V)
A2=MTRANS(TEXTTRENNEN($A$1;"-"))

B2=LET(U;WIEDERHOLEN(TEXTKETTE(SEQUENZ(10;1;0))&"-";ABRUNDEN(2^15/11;0));V;U&"01234567"&"$"&"ABCDEFGH";MTRANS(TEXTTRENNEN(V;"-")))
C2=MTRANS(DROP(REDUCE("";$A$1;LAMBDA(D;A;WENNFEHLER(VSTACK(D;TEXTTRENNEN(A;"-"));"")));1))
D2=LET(U;WIEDERHOLEN(TEXTKETTE(SEQUENZ(10;1;0))&"-";ABRUNDEN(2^15/11;0));V;U&"01234567"&"$"&"ABCDEFGH";MTRANS(DROP(REDUCE("";V;LAMBDA(D;A;WENNFEHLER(VSTACK(D;TEXTTRENNEN(A;"-"));"")));1)))

In Zeile 2.980 steht immer der Wert 01234567$, also ohne dass etwas nach dem $ folgt. Also ich verstehe das so, dass per se abgeschnitten
wird, was dann auch beim Zusammenbau statischer Texte bspw. in LET oder LAMBDA passiert.

LCohen: Deine SPLIT-Funktionen (Code 2 und Code 3) ergeben bei mir für Zeile 2.980 einmal einen leeren Wert und einmal den Fehler #WERT.
Und, mein TEXT.SPLIT funktionierte übrigens auch erstmal nicht mehr. Und zwar weil ich dort ARRAY.FROMTEXT drin habe und Argumente
weggelassen hatte. Excel erkennt das nicht mehr. Da wurde wohl was intern geändert. Wenn ich das korrigiere, liefert mir dann TEXT.SPLIT
ebenfalls in Zeile 2.980 nichts. Jedenfalls muss ich wohl alle meine LAMBDAs nochmal durchgehen. Kann dauern, zu wenig Zeit.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#37
Mal als Anwendungsbeispiel:
Pivot per einziger Formelzelle:
https://www.ms-office-forum.net/forum/sh...?p=2068583&postcount=8
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • PIVPQ
Antworten Top


Gehe zu:


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