Anzeige
Archiv - Navigation
1176to1180
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
Inhaltsverzeichnis

VBA Like Operator mit Positionsrückgabe?

VBA Like Operator mit Positionsrückgabe?
Roger
Hallo Forum,
vor kurzem hatte mir Franz schon mal mit dem Like Operator auf die Sprünge geholfen. Nun habe ich eine Folgefrage zu Like:
Like liefert nur ein True oder False zurück. Nun ist das bei 1:1 matching in Ordnung. Kombiniert man Like allerdings mit Wildcards (was auch gut funktioniert), sol liefert es auch hier ein korrektes Ergebnis. Wenn ich jedoch an dem konkreten Teilstring der auf das via Like Vergleichsmuster passt interessiert bin, sehe ich zur Zeit nur die Möglichkeit dnn den String manuell zu parsen bzw. einen Like Befehl Zeichenweise versetzt gegen den zu untersuchenden String "rüberzusliden". Gibt es hier eine Ide wie man einen Teilstring der in einer Zelle enthalten ist und auf den das Muster passt herauszuholen? Via InStr wäre ok, doch fehlt mir hier ja die genaue Startposition.
Vielen Dank für jegliche Idee.
Gruß Roger
AW: VBA Like Operator mit Positionsrückgabe?
08.09.2010 09:39:51
xr8k2
Hallo Roger,
kannst du das noch mal an einem Beispiel erklären, was du meinst?
Sonst ists ein bissl schwer zu verstehen.
Gruß,
xr8k2
AW: VBA Like Operator mit Positionsrückgabe?
08.09.2010 09:59:36
Roger
Hi xr8k2,
ein Beispiel könnte so Aussehen:
Suchmuster = "*[A-Z][A-Z]*"
Suchstring = "1234HH657890"
In diesem Fall würde "Suchstring Like Suchmuster" ein TRUE liefern, da "HH" im Suchstring auf das Muster passt. Was ich benötige wäre allerdings genau "HH" bei einem anderen Suchstring könnte das gleiche Suchmuster natürlich ein anderes Ergebnis liefern. Alternativ langt mir auch die Position im Suchstring ab der das Suchmuster auftaucht - den Rest kann man sich ja rausholen.
Gruß
Roger
Anzeige
AW: VBA Like Operator mit Positionsrückgabe?
08.09.2010 09:45:23
JogyB
Hallo Roger,
das wäre ein Anwendungsfalls für Vbscript.Regexp. Schon mal damit gearbeitet?
Gruß, Jogy
AW: VBA Like Operator mit Positionsrückgabe?
08.09.2010 09:47:24
Roger
Hi Jogy,
nein das sagt mir bislang nichts. Werde aber mal nasch Regexp schauen. Danke für den Hinweis.
Gruß
Roger
AW: VBA Like Operator mit Positionsrückgabe?
08.09.2010 09:52:52
JogyB
Hallo Roger,
hier eine ausführliche Erklärung des Aufbaus der regulären Ausdrücke:
http://www.activevb.de/rubriken/kolumne/kol_19/regexp.html
Unten sind noch drei Programmierbeispiele in VB, die auch in VBA funktionieren sollten. Den Verweis braucht man nicht unbedingt, man kann auch alles als Object deklarieren und das RegExp-Objekt dann mit CreateObject erzeugen:
Dim regEx As Object
Set regEx = CreateObject("Vbscript.Regexp")

Für den Anfang ist der Verweis aber sinnvoll, dann dann auch Intellisense zur Verfügung steht.
Gruß, Jogy
Anzeige
Mal drüberschauen
08.09.2010 11:52:49
EvilRik
HalliHallo,
war ne gute Frage Roger und ne gute Antwort Jogy.
Allerdings haut mein Code-Gebastel von Jogy's Link nicht richtig hin.
Hast du es gelöst Roger oder kannst du Jogy (oder jmd anders) bitte mal rüberschauen und verbessern, ergänzen?
Das 'Ausgeklammerte' wäre die elgante Variante. Habe ich aber nicht hinbekommen. Deswegen meine Krücke mit Sprungmarken. Funktioniert zwar, sieht aber komisch aus :)
Danke Euch
Henrik
Sub FindeMich()
Dim strText As String, strSuchText As String, lngMatchPos As Long, strMatch As String
Dim Regex As Object, objMatch As Object, zae1 As Integer, lngMatchLen As Long
strSuchText = "[A-Z]{2}"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.MultiLine = True
.Pattern = strSuchText
strText = "Hund'HaRRy' aus 20518HH bellt laut. "
'Set objMatch = .Execute(strText))
'If Not objMatch Is Nothing Then
'For zae1 = objMatch.Count - 1 To 0 Step -1
'MsgBox "Position:" & objMatch(zae1).FirstIndex & Chr(10) & "Text:" & objMatch( _
zae1).Value
'Next zae1
'End If
nochmal:
strText = Mid(strText, lngMatchPos + lngMatchLen + 1, Len(strText))
Set objMatch = .Execute(strText)
If Not objMatch.Count = 0 Then
zae1 = 1 + zae1 + zae1
With objMatch(0)
lngMatchPos = .FirstIndex + lngMatchPos
strMatch = .Value
lngMatchLen = Len(strMatch)
If .FirstIndex = 0 Then GoTo ende:
MsgBox "Position:" & lngMatchPos + zae1 & Chr(10) & "Text:" & strMatch
End With
Set objMatch = Nothing
GoTo nochmal
End If
End With
ende:
End Sub

Anzeige
AW: Mal drüberschauen
08.09.2010 12:05:42
JogyB
Hallo Henrik,
da hat das Global gefehlt.
Sub FindeMich()
Dim strText As String, strSuchText As String
Dim Regex As Object, objMatch As Object, zae1 As Integer
strSuchText = "[A-Z]{2}"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Global = True
.Pattern = strSuchText
strText = "Hund'HaRRy' aus 20518HH bellt laut!" & vbNewLine & "Super toLL"
Set objMatch = .Execute(strText)
If Not objMatch Is Nothing Then
For zae1 = objMatch.Count - 1 To 0 Step -1
MsgBox "Position:" & objMatch(zae1).FirstIndex & Chr(10) & "Text:" & objMatch( _
zae1).Value
Next zae1
End If
End With
End Sub

MultiLine ist in dem Fall unnötig, das ist dann sinnvoll, wenn Du eine RegExp bastelst, die am Zeilenende schaut, also so was:
Sub FindeMich2()
Dim strText As String, strSuchText As String
Dim Regex As Object, objMatch As Object, zae1 As Integer
strSuchText = "!$"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.MultiLine = True
.Global = True
.Pattern = strSuchText
strText = "Hund'HaRRy' aus 20518HH bellt laut!" & vbNewLine & "Super toLL!"
Set objMatch = .Execute(strText)
If Not objMatch Is Nothing Then
For zae1 = objMatch.Count - 1 To 0 Step -1
MsgBox "Position:" & objMatch(zae1).FirstIndex & Chr(10) & "Text:" & objMatch( _
zae1).Value
Next zae1
End If
End With
End Sub

Gruß, Jogy
Anzeige
Danke Jogy, wieder ein Schritt nach vorn :) oT
08.09.2010 12:09:41
EvilRik
AW: Danke Jogy, wieder ein Schritt nach vorn :) oT
08.09.2010 12:36:22
Roger
Hallo und vielen Dank an alle,
ich werde das baldmöglichst einbauen und testen. Hat auf jeden Fall schon sehr geholfen und gibt Inspiration zu weiteren Idden.
Gruß
Roger

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige