[Excel] Neue Text-Funktionen. Vielleicht. Demnächst.
#21
Ja, schon. Wobei die ganzen Array-Manipulationen jetzt die Leute davon befreien, ein bisschen zu denken und zu rechnen (z.B. hier vor 15 Jahren). Das Programm soll ja auch Zeit sparen.

Also: Einerseits etwas "niederschwellig", aber doch "berechtigt".

TEXTTRENNEN ist natürlich wichtig. Funktioniert es denn auch 2D? TEXTVERKETTEN funktioniert nur mit NACHZEILE 2D, aber das ist ja auch begründet. Ich würde auch dort lieber ein weiteres Argument NACHZEILE oder NACHSPALTE direkt in der Funktion sehen.

Bin mal gespannt, ob man sich die Dinger alle merken kann. Das war mit INDEX/ZEILE/SPALTE/REST/KÜRZEN alles leistbar, und der Funktionsschatz reichte aus.

Wir steuern also von "Wer zaubert die passende Formel?" Richtung "Wer erinnert den Namen des richtigen Tools?".
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#22
Habe mir nun das 100minütige Jon-Acampora-Video "14 new Excel Functions" angeschaut.

Die Funktionen haben nun doch alle ihre Berechtigung für mich.

OT: Kleine Neuigkeit für mich, was SPILL-Verbünde anbelangt (sah ich dort):

A1: ={1;2;3}
B1: leer
C1: ={4;5;6;7}

E1: =A1#:C1 ergibt
1 0 4
2 0 5
3 0 6


E1: =A1#:C1# ergibt
1 0 4
2 0 5
3 0 6
0 0 7


E1: =A1:C1# ergibt #BEZUG! 
E1: =(A1:C1)# ergibt #BEZUG!

Nun ballern wir einen horizontalen SPILL dazu:

A6: ={1.2.3.4}
H1: =(A1#:C1):A6 oder =(A1#:C1#):A6 ergibt
1 0 4
2 0 5
3 0 6
0 0 7
0 0 0
1 2 3


Ein Verbreiterungsversuch schlägt jedoch fehl: H1:=(A1#:C1#):A6# ergibt #BEZUG!

Jetzt den umgekehrten Weg:
H1: =A1#:A6 ergibt
1
2
3
0
0
1


H1: =A1#:A6# ergibt
1 0 4 0
2 0 5 0
3 0 6 0
0 0 7 0
0 0 0 0
1 2 3 4


Letzteres zeigt nebenbei, dass man auch andere Zellinhalte dabei mitnimmt.

Es wird also, egal, wie viele #-Bereiche man verknüpft, maximal immer nur der tatsächliche 2D-Bereich zurückgegeben (oder halt nur 1D). Somit ist physisch immer die Tabelle Grundlage, so wie auch bei BEREICH.VERSCHIEBEN, vor dem man sich daher in LAMBDAs hüten sollte. Daher sind VSTACK und HSTACK so wichtig.

Andere Anmerkungen:
=VSTACK(Tab1:Tab52!A1:H99) funktioniert, was es zu einer 3D-Funktion macht.
=TEXTTRENNEN() trennt leider keine Spalte, sondern nur eine ZELLE. Somit muss man für das Behandeln z.B. einer gespillten Spalte, genauso wie bei TEXTVERKETTEN, ein NACHZEILE(LAMBDA drumrum setzen. Dafür kann man aber ein Delimiter-Array verwenden, so dass mehrere Trenner gleichzeitig funktionieren. TAKE (AUFNEHMEN) und DROP haben ggü INDEX den Vorteil, dass man damit das Array beschneiden kann, und zwar von allen vier Seiten. Das kürzt die Sache doch erheblich ab.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 2 Nutzer sagen Danke an LCohen für diesen Beitrag:
  • Kuwer, maninweb
Antworten Top
#23
Moin,

interessante Erkenntnisse!

Zu TEXTTRENNEN über eine Spalte, liesse sich das über Umwege erreichen. Die einfachste Variante wäre, den Bereich zu einem Text 
zu verketten und dann über die Trennzeichen zu gehen. Eine andere, kompliziertere, Variante wäre, DROP, REDUCE (!) und VSTACK
zu verwenden. Formeln ...

Code:
Variante 1 =LET(Daten;$A$2:$A$5;WENNFEHLER(TEXTTRENNEN(TEXTVERKETTEN(ZEICHEN(1);WAHR;Daten);" ";ZEICHEN(1));"-"))
Variante 2 =LET(Daten;$A$2:$A$5;DROP(REDUCE("";Daten;LAMBDA(Value;Array; WENNFEHLER(VSTACK(Value;TEXTTRENNEN(Array;" "));"-") ));1))

   

Und noch eine Variante, die einen mehrspaltigen Bereich berücksichtigt. Das Auffüllen erfolgt von links aus gesehen. Man könnte
vielleicht gucken, ob man das Auffüllen so gestaltet, dass die Werte aus Spalte B erst nach denen aus Spalte A gespillt werden,
hier im Bild dann ab Spalte H.

Code:
=LET(Daten;$A$2:$B$5;Trennzeichen;" ";T;WAHL(SEQUENZ(2);Trennzeichen;ZEICHEN(1));M;MATRIXERSTELLEN(ZEILEN(Daten);1;
 LAMBDA(X;Y;TEXTVERKETTEN(INDEX(T;2;1);WAHR;INDEX(Daten;X;0))));WENNFEHLER(TEXTTRENNEN(TEXTVERKETTEN(ZEICHEN(2);WAHR;M);T;ZEICHEN(2));"-"))

   

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
#24
Viele Möglichkeiten bei Dir!

Ohne TEXTTRENNEN war meine letzte Lösung so (mit Leerzeichen als Default und Autoorientierung Spalte/Zeile):

=LAMBDA(x;[tt];LET(
t;WENN(ODER(WURDEAUSGELASSEN(tt);tt="");" ";tt);
u;ZEICHEN(1);
y;MAX(LÄNGE(x)-LÄNGE(WECHSELN(x;t;))+1);
z;WENN(SPALTEN(x)=1;SEQUENZ(;y);SEQUENZ(y));
f;LAMBDA(g;FINDEN(u;WECHSELN(t&x&u;t;u;z+g)));
WECHSELN(TEIL(x;f(0);f(1)-f(0));t;)))
({"Dies ist Satz 1";"und dies ist Satz Ende Gelände"})

({"Dies ist Satz 1"."und dies ist Satz Ende Gelände"}) mit Punkt statt Semikolon entsprechend!

Mit TEXTTRENNEN hätte ich mir wenigstens folgendes gewünscht:

=NACHZEILE({"Dies ist Satz 1";"und dies ist Satz Ende Gelände"};LAMBDA(a;TEXTTRENNEN(a;" ")))

Klappt aber nicht (auch nicht mit gleichanzahligen Spalten). Bei TEXTVERKETTEN geht NACHZEILE hingegen:

=NACHZEILE({"Dies"."ist"."Satz"."1".""."";"und"."dies"."ist"."Satz"."Ende"."Gelände"};LAMBDA(a;TEXTVERKETTEN(" ";;a)))
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#25
Moin,

stimmt, NACHZEILE wäre ja eigentlich das naheliegenste. Habe auch mal was rumprobiert, z.B. statt a dann INDEX(A;0;{1.2.3}) nehmen bringt auch nichts.
Hatte übrigens auch mal eine ähnliche LAMBDA zu Deiner Version ohne TEXTTRENNEN erstellt und diese ARRAY.SPLIT genannt. Wäre mit den aktuellen
Funktionen wohl zu kompliziert.

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
#26
Manchmal fragt man sich, ob bei Microsoft (immer) richtige Softwareentwickler am Werk sind. 

Also solche, die nach allen Regeln der Kunst agieren, mit ordentlichen Datentypen, Feldern, Alternativen usw. Denn man vergesse nicht: Die Suite MS 365 ist wahrscheinlich schon 100 Mio mal in Gebrauch und vermutlich das häufigste Bezahlprogramm auf der ganzen Welt. Eigentlich könnte MS die Leute mit Gold bezahlen.

Auch die Entscheider, die einige Funktionen übersetzen und andere nicht. Was soll das?

Denn das kann doch so nicht wahr sein! Man ist seit 4 Jahren SPILLend unterwegs, und dann wird die höchst SPILL-bedürftige TEXTTRENNEN-Funktion einfach stumpf statisch gebaut.

TEXTVOR/TEXTNACH können es übrigens mit NACHZEILE:

=NACHZEILE(A11:A14;LAMBDA(a;TEXTVOR(a;" ";2)))
=NACHZEILE(A11:A14;LAMBDA(a;TEXTNACH(a;" ";2)))


Und jetzt kommt's: Sogar ohne!

=TEXTVOR(A11:A14;" ";2)
=TEXTNACH(A11:A14;" ";2)


Daraus ein schnelles TEXTTRENNEN gebastelt:

=LET(x;A6:A9;z;" ";y;SEQUENZ(;MAX(LÄNGE(x)-LÄNGE(WECHSELN(x;z;)))+1);WENNFEHLER(TEXTNACH(TEXTVOR(z&x&z;z;y+1);z;y);""))
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 2 Nutzer sagen Danke an LCohen für diesen Beitrag:
  • PIVPQ, maninweb
Antworten Top
#27
Hallo,

Übersetzungen müssten meines Wissens noch erfolgen, da ja noch Beta. In anderen Sprachen ist das auch noch nicht vollständig übersetzt.
TEXTTRENNEN liefert ein Array nach dem Splitten eines Textes. Das heißt, dass ein Bereich in TEXTTRENNEN ein Ergebnis liefert, das ein
Array von Arrays ist. Damit kann Excel nicht umgehen (Limitierung).

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
#28
Hast Du meine Funktion SPLIT (Code 2 und Code 3) denn noch nicht ausprobiert?

Denn da ist doch genau das möglich (aus einem Vektor wird ein Array; die Funktion erkennt sogar die Richtung des Vektors selbst, so dass es kein Argument dafür braucht). Auch Excel kann das natürlich selbst, denn es geht doch nur um 2 Dimensionen. Auch TEXTVERKETTEN hätte man mit einem Zusatzargument NACHZEILE bzw. NACHSPALTE ausstatten können. Da TEXTVERKETTEN aber vor den SPILL-Formeln kam, war das evtl. noch zu entschuldigen.

Da hatte ich eben dann doch einen "Verdacht" und habe mir Dein ARRAY.SPLIT angeschaut (bei dem ich immer aufgrund des Namens vermutete, dass es das könne). Mit XMLFILTERN bist Du aber genau auf diese scheinbare Unmöglichkeit gelaufen. Denn das kann tatsächlich nur 1D. Als Spalte.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#29
Moin

habe ich ausprobiert, mich aber auf Code 3 fokussiert. Bin jedoch der Ansicht, dass bspw. die Zwischenrückgabe kein Array ist,
das wiederum Arrays enthält, sondern Text, z.B. aus TEXTVOR(z&x&z;z;y+1). Daher funktioniert das. Ähnlich sehe ich das
für Code 2. Dass die Calc-Engine keine Arrays von Arrays auswerten kann, ist eine Aussage des Excel-Teams.

Ich schätze, dass TEXTTRENNEN intern anders gebaut ist, als bspw. TEXTVOR. Und zwar wegen der Möglichkeit, mehrere
Spaltentrenner zu haben, was ggf. intern zu Arrays führt.

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
#30
Habe jetzt Dein #27 kapiert!

office-loesung.de/p/viewtopic.php?f=166&t=877124#p3387756
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • maninweb
Antworten Top


Gehe zu:


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