Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wörter in String suchen und ausgeben

Wörter in String suchen und ausgeben
09.11.2018 17:31:39
Steven
Hallo liebe VBAler :)
ich benötige ein wenig Hilfe, da ich nach langer Suche auf nichts gestoßen bin, das mir richtig weiterhilft.
Ich würde gerne eine Liste von Begriffen (Spalte A) in einem Array speichern und anschließend längere Strings, Zeile für Zeile, durchgehen und die jeweiligen Matches rechts daneben schreiben. Gibt es mehrere Matches, soll dies in die nächste freie Spalte geschrieben werden.
Ich habe dafür mal ein ganz einfaches Beispiel gebaut inkl. dem, was am Ende rauskommen soll: https://www.herber.de/bbs/user/125293.xlsx
Die richtige Liste wird mit mehreren 100 Einträgen und auch mehreren 100 Strings bedeutend länger und aufgrund der Ausgabe in unterschiedlichen Spalten sollte es mE eine VBA Lösung sein.
Ich bedanke mich rechtherzlich im Voraus!
Viele Grüße

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wörter in String suchen und ausgeben
10.11.2018 11:01:38
Steven
Funktioniert super. Herzlichen Dank!
das funktioniert einwandfrei per Formel
09.11.2018 19:07:14
WF
Hi,
in E2 folgende Arrayformel:
{=WENNFEHLER(INDEX($A$2:$A$7;KKLEINSTE(WENN(ISTZAHL(FINDEN($A$2:$A$7&" ";WECHSELN(WECHSELN($D2;",";); ".";)&" "));ZEILE($1:$6));SPALTE(A1)));"") }
nach rechts und nach unten kopieren
Salut WF
AW: das funktioniert einwandfrei per Formel
10.11.2018 11:18:27
Sulprobil
Hallo WT,
Einwandfrei?
Bei quadratischer Laufzeit mit Hunderten * Hunderten von Eingabefeldern, bei denen man diese Formel Hunderte von Malen nach rechts kopieren muss, um den jeweils ersten Nichttreffer zu sehen?
Viele Grüße,
Bernd P
Anzeige
quadratische Laufzeit ?
10.11.2018 16:36:11
WF
Was für ne Laufzeit - ich sehe in dem Beispiel keine Datumswerte ?
WF
Und falls dir WFs Fml nicht liegt, die nebenbei …
10.11.2018 01:37:41
Luc:-?
…eine der kürzeren ist (auch, wenn man sie „Mai-Baum-fähig“ anlegt), Steven,
könnte ich dir einen Kompromiss zwischen Fml und VBA anbieten (nein, nicht Fmln mit VBA eintragen, was auch ginge!) → UDF-Verwendung in einer zeilenweisen pluralen MatrixFml (nebenbei, WFs ist singular!). Mit gleich 3 UDFs sähe die dann so aus (falls #NV vermieden wdn soll):
E8:K8[;E9:K11]: {=VSplit(VJoin(WENN(VLike(" "&D2&" ";"* "&MTRANS($A$2:$A$7)&"[ ,.]*");MTRANS($A$2:$A$7);"");;-1)&
WIEDERHOLEN(" ";7))}
Ohne die UDF VLike wäre sie deutlich länger, auch länger als die von WF. Ich zeige sie trotzdem, weil hierin eine interessante Anwendung von VERGLEICH steckt (Lupo hatte neulich wohl mal etwas Ähnliches gezeigt):
E2:K2[;E3:K5]: {=VSplit(VJoin(WENN(ISTNV(VERGLEICH("* "&MTRANS($A$2:$A$7)&" *";INDEX(" "&WECHSELN(WECHSELN($D$2:$D$5;",";);".";)&" ";
ZEILE(A1));0));"";MTRANS($A$2:$A$7));;-1)&WIEDERHOLEN(" ";7))}

Mit einem Xl-Abo (365) könntest du nach neuestem Stand möglicherweise beide verbliebenen UDFs durch neue Xl-Standard-Fktt ersetzen.
Ansonsten ging's mir bei der 2.Fml darum, zu zeigen, dass es in Xl nicht nur Fktt gibt, die skalare Tensoren* zurückliefern wie bspw ZEILE und SPALTE, sondern auch welche, die zwingend zumindest einen solchen verlangen (deshalb auch noch INDEX, denn sonst hätte der jeweilige modifizierte) Wert ja gereicht, ein einfacher Verweis auf eine EinzelZelle tut's ja auch). Bei INDEX ist das klar, denn hier muss aus Matrix/(Ko-)Vektor gewählt wdn, bei VERGLEICH aber nicht so eindeutig. Auf diese Weise könnte man auch Platzhalter nutzen (VERGLEICH erlaubt das!) und auch alle Auftreten eines Begriff(teil)s in einem (Ko-)Vektor feststellen.
(Ggf schreibe ich dazu demnächst noch etwas mehr…)
* Kein wirklicher Einzelwert (Skalar), sondern ein (skalarer) 0Tensor mit nur einem Element → Typ(0,0)-Tensor. Ein weiterer Beweis dafür, dass viele alte Xl-Fktt tensor-basiert arbeiten — in der Pgmmrg zumeist durchaus üblich.
Feedback nicht unerwünscht! Morhn, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
AW: Und falls dir WFs Fml nicht liegt, die nebenbei …
10.11.2018 11:42:31
Steven
Hallo zusammen,
danke für die ergänzenden Antworten. Die Formel funktioniert zwar, danke dafür, allerdings finde ich die auch nicht so handsam.
Ein Problem tritt allerdings bei beiden Lösungen noch auf (gilt auch für das VBA): Groß- und Kleinschreibung ist relevant. Ich denke, dass ich einfach den Text bei jedem Durchgang der Schleife vorher mit LCase umwandle, denn die Suchbegriffe sind alle klein.
Darüber hinaus wird am Anfang mittels einer Schleife der Array befüllt. Geht das auch direkt? Denn wenn ich die Schleife groß mache (z.B. 1000) gibt er mir einen Laufzeitfehler 13 aus.
Danke & Viele Grüße
Anzeige
AW: Und falls dir WFs Fml nicht liegt, die nebenbei …
10.11.2018 11:47:40
onur
"Denn wenn ich die Schleife groß mache (z.B. 1000) gibt er mir einen Laufzeitfehler 13 aus" - klar, denn die Schleife füllt das Array AUTOMATISCH, egal wieviele Einträge da sind. Da brauchst (darfst) du nix "groß machen".
AW: Und falls dir WFs Fml nicht liegt, die nebenbei …
10.11.2018 11:52:11
onur
Ich habe eben die erste Schleife von 100 auf 10000 geändert, habe trotzdem keine Fehlermeldung.

339 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige