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?
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
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
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?
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.
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
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
@Schülerin
Mir fällt auf dass du nur Fragen stellst und selbst keine Beiträge leistest.
Was beabsichtigst du mit diesen Fragen ?
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
Hallo Atilla,
das funzt ja super mit dem s*r!
Nora