Clever-Excel-Forum

Normale Version: mehrere strings zwischen 2 Variablen herauslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Excel Heros!

Hätte da eine Frage! Ich möchte aus einem String alle Variablen herauslesen, die zwischen % liegen inkl. den % Anzeigen.

Also wenn in der Zelle D3 "Robschi %kennt% sich in %Excel% nicht aus."

Dann soll Ausgegeben werden:  %kennt% %Excel%

Mit 
=TEIL(D3;SUCHEN("%";D3);SUCHEN("%";D3;SUCHEN("%";D3)+1)-SUCHEN("%";D3)+1)
bekomme ich nur den ersten Teil heraus.

Wie mach ich da weiter?
Danke, L.G. Robschi
Hallo,

wenn Du ein modernes Excel hast, was dynamische Arrays kann und somit die Funktionen EINDEUTIG und SEQUENZ kennt,
kannst Du es wie folgt lösen ...


Code:
A1=Heute ist ein %Variable 1% Tag und %Variable 2% machen %Variable 3%.

B1=1
C1=WENNFEHLER(TEIL($A$1;INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1-1);
   INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1)-INDEX(EINDEUTIG(
   WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1-1)+1);"-")

B2=B1+1
C2=WENNFEHLER(TEIL($A$1;INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B2-1);
   INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B2)-INDEX(EINDEUTIG(
   WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B2-1)+1);"-")

:


Gruß
Hallo, :19:

habe die Formeln von "maninweb" in eine Beispieldatei gepackt. Wenn du da Fehler bekommst, habe ich noch zwei Alternativen drin: :21:
[attachment=30842]
Off topic:

Hallo Mourad!

Zitat:… wenn Du ein modernes Excel hast, was […] SEQUENZ kennt,


Ich habe die Funktion bisher noch nicht benutzt, sehe aber gerade die gewaltigen Möglichkeiten, die auf Basis von Zählvariablen entstehen.
(Fast) jeder kennt ja die Matrixversion zur Ermittlung der Quersumme einer Zahl mit unbekannter Stellenanzahl:
{=SUMME(1*TEIL(A2;ZEILE(INDIREKT("1:"&LÄNGE(A2)));1))}

Geht ja nun viel einfacher:
=SUMME(1*TEIL(A2;SEQUENZ(LÄNGE(A2));1))

ABC
1ZahlQsneuQsalt
2123451515
312341010
412366

ZelleFormel
B2=SUMME(--TEIL(A2;SEQUENZ(LÄNGE(A2));1))
C2{=SUMME(1*TEIL(A2;ZEILE(INDIREKT("1:"&LÄNGE(A2)));1))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.

Gruß Ralf
Off-Topic als Antwort an Ralf.
----------------------------------------------------
Hallo Ralf,

jep, die neuen Funktionen sind schon cool. Hier eine Möglichkeit/Idee, einen Text nach Trennzeichen aufzuteilen.


Code:
A1=K01234-Z567-A3456-Information
B1=EINDEUTIG(WENNFEHLER(FINDEN("-";"-"&$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)+2))
C1=WENNFEHLER(TEIL($A$1;B1#;INDEX(B1#;2):INDEX(B1#;ZEILEN(B1#))-B1#-1);"")

Noch ist's mir nicht gelungen, das dynamische Ausgabe-Array um eine Zeile zu reduzieren.
Vielleicht hat ja jemand eine Idee dazu.

Gruß
=WECHSELN("%"&TEXTVERKETTEN("% %";;WENN(ISTFEHLER(SUCHEN("#";
GLÄTTEN(TEIL(WECHSELN(WECHSELN($A1;" ";"#");"%";WIEDERHOLEN(" ";299));SPALTE(A1:Z1)*299-298;299))));
GLÄTTEN(TEIL(WECHSELN(WECHSELN($A1;" ";"#");"%";WIEDERHOLEN(" ";299));SPALTE(A1:Z1)*299-298;299));""))&"%";"%%";)
Hi, 
Wenn bei deiner Formel ein zeichen hinter dem %Zeichen steht, dann wird dieses auch angezeigt:
Lunch today @13:00h %name%?   --> %name% %?%
wie bekomme ich das noch weg?
DANKE 
Robschi
Danke. 
Die Lösung: =WENNFEHLER(TEIL($A$1;INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1-1);
  INDEX(EINDEUTIG(WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1)-INDEX(EINDEUTIG(
  WENNFEHLER(FINDEN("%";$A$1;SEQUENZ(LÄNGE($A$1)));LÄNGE($A$1)));2*B1-1)+1);"-")


ist genial für meine Anwendung!

Eine Frage noch dazu: ich bräuchte wirklich nur die Ausgaben die ohne Leerzeichen zwischen % stehen.
Wenn im text beispielweise 
To get 20% off your next oil change; send %code% to %name%.
steht, dann sollte 
bei B1= 1 %code% und bei B1=2 %name%
ausgegeben werden.

Kannst du mir da auch noch helfen.
Liebe Grüße
Robschi
Hallo,

das ist komplizierter, weshalb ich da eher eine Hilfsspalte verwenden würde. Nur rudimentär getestet ...


Code:
A1=To get 20% off your next oil change; send %code% to %name%.

B1=WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(
   WECHSELN($A$1;".";" ");",";" ");";";" ");"-";" ");"<";" ");">";" ");"%%";"% %");" %";"<");"% ";">")

C1=1
D1=WENNFEHLER(INDEX(WECHSELN(LINKS(TEIL($B$1;EINDEUTIG(WENNFEHLER(SUCHEN("<"&"*"&">";$B$1;
   SEQUENZ(LÄNGE($B$1)));LÄNGE($B$1)));99);FINDEN(">";TEIL($B$1;EINDEUTIG(WENNFEHLER(
   SUCHEN("<"&"*"&">";$B$1;SEQUENZ(LÄNGE($B$1)));LÄNGE($B$1)));99))-1);"<";"%")&"%";C1;1);"-")


C2=C1+1
D2=D1 AutoAusfüllen


Gruß
DANKE Nochmal! Ich habs jetzt mit der VBA Funktion gelöst,... das ist am effizientesten!