Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
372to376
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA String-In-String-Suche mit Wildcard

VBA String-In-String-Suche mit Wildcard
01.02.2004 10:29:16
Lupus
Hallo Excel-User,
ich bin auf der Suche nach einem Code der einen String (strMatch), welcher Wildcards enthält, in einem anderen String(strCheck) sucht und der den gefundenen String zurückgibt.
Mit folgendem Code finde ich die erste Position von strMatch in strCheck.
lngPos = Application.WorksheetFunction.SearchB(strMatch, strCheck, lngLast)
1. Wie finde ich jetzt heraus, um welchen String es sich handelt?
2. WorksheetFunction.SearchB kann keine Strings größer (~) 32.500 Characters bearbeiten.
Wie müsste die Gleichung für lngPos aussehen, wenn der String größer 32.500 Characters ist, ohne vorher den String zu stückeln und mit einer Schleife zu durchlaufen müssen?
Gruß Lupus

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 10:48:44
Nepumuk
Hallo Wolf,
schau dir mal den Like - Operator an.
Gruß
Nepumuk
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 11:55:06
Lupus
Hallo Nepumuk,
Mit Like habe ich das schon versucht, leider vergebens; hier mein Ansatz:

Sub Test()
Dim strCheck As String, strMatch As String, strFound As String
Dim lngPos As Long
strCheck = "Lupus bekommt das nicht hin!"
strMatch = "u*n"
lngPos = 1
lngPos = InStr(lngPos, strCheck, strCheck Like "*" & strMatch & "*")
'Das Ergebnis von lngPos ist 0.
'StrFound = ????? welchen Code-Schnipsel gibt es hierfür?
End Sub

Wenn ich lngPos bestimmen kann, kann ich über eine Schleife die weiteren Fundstellen und strFound finden / bestimmen.
Gruß Lupus
Anzeige
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 12:54:55
Nepumuk
Hallo Wolf,
bei einem Vergleich mit Like, macht es wenig Sinn die Posititon der Ubereinstimmung zurückzubekommen. In deinem Beispiel gibt es schon vier Stück davon.

"Lupus bekommt das nicht hin!"

"Lupus bekommt das nicht hin!"

"Lupus bekommt das nicht hin!"

"Lupus bekommt das nicht hin!"
Welche Position soll da angegeben werden?
Gruß
Nepumuk

Anzeige
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 13:24:02
Lupus
Hallo Nepumuk,

> Welche Position soll da angegeben werden?
genau das ist ja mein Problem.
Mein strCheck ist seeehr lang, die Anfongsposition weiß ich nicht. Vielleicht kann man diese über eine Schleife definieren, irgendwie mit Left und strReduced = Len(strCheck) - 1.
Dies sind halt nur Ideen, die ich aber leider nicht umsetzen kann.
Gruß Lupus
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 13:34:30
Nepumuk
Hallo Wolf,
um bei deinem Beispiel zu bleiben, du könntest mit der Instr - Funktion nach dem ersten Vorkommen von u und nach dieser Position nach n weitersuchen. Das wäre auch sehr schnell.
Gruß
Nepumuk
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 14:43:24
Lupus
Hallo Nepumuk,
danke für den Ansatz; also wie
lngPos = InStr(lngPos, strCheck, Left(strMatch, 1))
und wie geht's weiter???
Mit der mid-Funktion kann ich zwar einen String zurückgeben, da ich aber nicht weiß wie lang strFound ist, komme ich damit auch nicht weiter.
strFound = Mid(strCheck, lngPos, [Length])
Ich habe mich auch schon in anderen VB(A)-Foren nach Lösungen umgesehen (habe aber kein cross posting durchgeführt) bin dort aber auch nicht auf ähnliche Fragestellungen / Lösungsansätze getroffen.
Auch eine Alertnativ-Lösung für SearchB konnte ich nicht finden, geschweige denn eine Erklärung für SearchB in der VBA-Hilfe.
Irgendwie wurmt mich das (damit meine ich nicht Dich), so schwer kann das doch gar nicht sein hierfür eine einfache Lösung zu finden.
Wäre Dir sehr dankbar, wenn Du mir irgendwie weiterhelfen könntest.
Gruß Lupus
Anzeige
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 14:55:25
Nepumuk
Hallo Wolf,
versuch mal ein realistisches Szenario zu entwerfen, in der du das einsetzen musst. Dann tu ich mir leichter.
Gruß
Nepumuk
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 16:04:37
Lupus
Hallo Nepumuk,
mein Szenario sieht leider genau so aus, wie ich es beschrieben habe.
In einem großen String (strCheck) suche alle möglichen Strings, die einem Vergleichsstring (strMatch) entsprechen. Die gefundenen Vergleichsstrings und deren Anfangs und Endpositionen schreibe ich ein Array. Dies klappt alles prima, solange nicht mit Wildcards wie "*" und "?" gearbeitet wird.
Folgenden Ansatz habe ich jetzt formuliert. Leider gibt auch dieser nicht den exakten strFound zurück.

Sub Test()
Dim strCheck As String, strMatch As String
Dim strFound As String, strFirstChr As String
Dim lngPos As Long, i As Integer
strCheck = "Lupus bekommt das nicht hin! Sauerei!"
strMatch = "u*e"
strFirstChr = Left(strMatch, 1)
i = 1
lngPos = Application.WorksheetFunction.SearchB(strMatch, strCheck, 1)
For lngPos = 1 To Len(strCheck)
lngPos = InStr(lngPos, strCheck, strFirstChr)
If lngPos = 0 Then Exit For
strFound = Mid(strCheck, lngPos, LenFoundString(strCheck, strMatch))
Cells(i, 1).Value = strFound
i = i + 1
Next
End Sub


Public

Function LenFoundString(strCheck, strMatch) As Long
Dim lngLen As Long
lngLen = Len(strCheck)
While Left(strCheck, lngLen) Like strMatch
lngLen = lngLen - 1
Wend
LenFoundString = lngLen + 1
End Function

Der Code müßte noch in bezug auf strFirstChr = Left(strMatch, "Anzahlzeichen vor dem *")verbessert werden.
Aber auch das wäre keine optimale Lösung, denn der Suchstring könnte auch "u*u*e" lauten.
Ist schon eine verzwickte Sache.
Gruß Lupus
Anzeige
AW: VBA String-In-String-Suche mit Wildcard
01.02.2004 19:41:59
Nepumuk
Hallo Wolf,
ok, und was sollte nach diesem Beispiel genau zurückgegeben werden?
Gruß
Nepumuk
AW: VBA String-In-String-Suche mit Wildcard
02.02.2004 16:15:53
Lupus
Hallo Nepumuk,
> ok, und was sollte nach diesem Beispiel genau zurückgegeben werden?
Ein oder mehrere Strings und dessen/deren Position/en in strCheck.
Bei dem String handelt es sich nicht um einen normalen Text-Code, sondern um den genetischen Code, in dem ich bestimmte Sequenzen suche. Die gefundene Sequenz wird dann nach physikalischen und chemischen Eigenschaften weiter ausgewertet.
Ich hoffe, daß Du jetzt eher meine Frage verstehen kannst.
Letztenendes habe ich aber noch keinen Ersatz für
Application.WorksheetFunction.SearchB
gefunden.
Gruß Lupus
Anzeige
AW: VBA String-In-String-Suche mit Wildcard
02.02.2004 17:22:36
Nepumuk
Hallo Wolf,
das bringt doch gleich mehr Licht in die Sache. Du willst die Position der Aminosäuren in einer RNA/DNA. Hast du mal so eine Probesequenz in einer Textdatei zum testen? Ich will nicht eine Stunde auf vier Tasten daddeln. Und wenn es geht einen Vergleichstring nach dem gesucht werden soll? Ich habe da schon eine ungefähre Vorstellung davon, wie das Problem zu lösen ist.
Gruß
Nepumuk (unter anderem auch Mikrobiologe)
AW: VBA String-In-String-Suche mit Wildcard
04.02.2004 14:08:25
Lupus
Hallo Nepumuk,
habe mir mal erlaubt den ganzen Code (mit Lösung) an Deine Email zu schicken.
Gruß Lupus

155 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige