Alle Fundstellen mit Wildcards in einem String mittels eines Strings ausgeben
#1
Hallo liebe Leute,

aufbauend auf meinem letzten Thread:
http://www.clever-excel-forum.de/Thread-...g-ausgeben

möchte ich die String in String-Suche hier gerne erweitern. Es geht um die Suche mit Wildcards und Platzhaltern.

Beginnen wir mit dem Satz:

strString = "Das Clever-Excel Forum, das Forum das sehr viele super Tipps gibt, das ist einfach riesig"

Ich möchte alle Fundstellen mit dem Muster d*s haben. Hier also das Wort das. - Wie mache ich das?
Top
#2
Hallo,

deine Variante z.B. so:


Code:
Sub String_in_String()
Dim strString As String, strSuch1 As String, strSuch2 As String, strErgebnis As String, intA As Integer
strString = "Ddss Clever-Excel Forum gibt viele super Tipps"
strSuch1 = "d"
strSuch2 = "s"

For intA = 1 To Len(strString)
If LCase(Mid(strString, intA, 1)) = strSuch1 And LCase(Mid(strString, intA + 2, 1)) = strSuch2 Then strErgebnis = strErgebnis & intA & ","
Next

Debug.Print Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub
Gruß Atilla
Top
#3
Hallo,

als Alternative, Text steht in A1:

Sub schuelerim()
i=1
j=1

For x = 1 to len(cells(i,j)
If mid(cells(i,j),x,3) like "d*s" then
Tx = Tx & x & "; "
Endif
Next x
Debug.print Tx 'oder cells(i,2) = tx
End sub

Der Code findet nur "d", nicht "D".

Mfg
Top
#4
Hallöchen,

mit folgendem Code bekomme ich wie gewünscht an den Stellen 18 und 65 die Ausgabe Forum:
Code:
Sub String_in_String_Wildcards()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuch = "F*r**"

For intA = 1 To Len(strString)
If (Mid(strString, intA, Len(strSuch))) Like strSuch Then strErgebnis = strErgebnis & intA & " " & Mid(strString, intA, Len(strSuch)) & " ,"
Next

Debug.Print "Ausgabe: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub
Nun gehen wir mal einen Schritt weiter. Wir wissen, dass der Anfangsbuchstabe unseres Suchstrings strSuch ein großes F ist und der Endbuchstabe ein kleines m ist. Die Anzahl der dazwischenliegenden Buchstaben ist uns aber völlig unbekannt. Wie schafft man es dann, dass für die Stellen 18 und 65 wieder Forum ausgegeben wird?
Top
#5
Hallo,

Code:
Sub String_in_String_Wildcards()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer
Dim iPos As Long
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuch = "F*m"

Do While IsNumeric(Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")"))
 iPos = Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")") + 1
 For intA = iPos - 1 To Len(strString)
   If (Mid(strString, iPos - 1, intA - iPos + 1)) Like strSuch Then
     strErgebnis = strErgebnis & iPos - 1 & " " & Mid(strString, iPos - 1, intA - iPos + 1) & " ,"
     Exit For
   End If
 Next
Loop

Debug.Print "Ausgabe: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub

Wenn Klein-Großschreibung beachtet werden soll, dann statt SEARCH FIND nehmen.
Gruß Atilla
Top
#6
Hallo Atilla,

habe zu diesem spannendem Thema mit Wildcards gerade deinen Code ausprobiert. Fängt der Suchstring ähnlich wie bei "Forum" mit einem Großbuchstaben an und endet mit einem Kleinbuchstaben (z.B. Suche nach Wörtern wie "Tipps", "Abenteuer" etc.), liefert dieser ein Klasse-Ergebnis bei der Wildcard-Suche. Leider versagt der Code völlig, wenn ich zwei Kleinbuchstaben habe, z.B. Suche nach dem Wort "super", mit Wildcardsuche also "s*r". Darüber hinaus meldet der Compiler bei mir einen Fehler, wenn ich statt Search Find verwende.
 

Grüße
Nora
Top
#7
Hallo Nora,

da war ich zu voreilig mit Find.

Das steht in der OH:

Zitat:Bei FINDEN und FINDENB wird zwischen Groß- und Kleinschreibung unterschieden, und es dürfen keine Platzhalterzeichen verwendet

Also geht es so nur mit SEARCH
Gruß Atilla
Top
#8
@Schülerin

Mir fällt auf dass du nur Fragen stellst und selbst keine Beiträge leistest.

Was beabsichtigst du mit diesen Fragen ?
Top
#9
Hallo Nora,

auf die Schnelle kann ich Dir diese leicht erweiterte Lösung anbieten:


Code:
Sub String_in_String_Wildcards()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer
Dim iPos As Long
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuch = "s*r"

Do While IsNumeric(Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")"))
 iPos = Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")") + 1
 For intA = iPos - 1 To Len(strString)
   If (Mid(strString, iPos - 1, intA - iPos + 1)) Like [strSuch] And UBound(Split((Mid(strString, iPos - 1, intA - iPos + 1)))) = 0 Then
     strErgebnis = strErgebnis & iPos - 1 & " " & Mid(strString, iPos - 1, intA - iPos + 1) & " ,"
     Exit For
   End If
 Next
Loop

If Len(strErgebnis) Then Debug.Print "Ausgabe: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Schülerin
Top
#10
Hallo Atilla,

das funzt ja super mit dem s*r!

Nora
Top


Gehe zu:


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