Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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?
Antworten 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
Antworten 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
Antworten 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?
Antworten 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
Antworten 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
Antworten 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
Antworten 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 ?
Antworten 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
Antworten Top
#10
Hallo Atilla,

das funzt ja super mit dem s*r!

Nora
Antworten Top


Gehe zu:


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