mehrere strings zwischen 2 Variablen herauslesen
#1
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
Top
#2
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ß
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
Top
#3
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]
Top
#4
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
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)
Top
#5
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ß
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
Top
#6
=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));""))&"%";"%%";)
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#7
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
Top
#8
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
Top
#9
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ß
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
Top
#10
DANKE Nochmal! Ich habs jetzt mit der VBA Funktion gelöst,... das ist am effizientesten!
Top


Gehe zu:


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