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
#11
Code:
Sub M_snb()
    sp = split("Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer.")
    c01 = "s*r"
    
    For j = 0 To UBound(sp)
       If Left(sp(j), 1) & Right(sp(j), 1) = Replace(c01, "*", "") Then c02 = c02 & vbLf & y & vbTab & sp(j)
       y = y + Len(sp(j)) + 1
    Next
    
    MsgBox c02
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Antworten Top
#12
Hallo Leute,

habe mal den Code von Atilla und SNB ausprobiert und festgestellt, dass die Wildcardsuche nur wortweise funktioniert. Wortübergreifend versagt die Suche.
Mit diesem von mir eingebautem "Patch" ist der Atilla-Code auch wortübergreifend einsetzbar:


Code:
Function Wildcard(strString, strSuch)
Dim iPos As Long, intA As Integer
strString = Replace(strString, " ", "#")

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
strErgebnis = Replace(strErgebnis, "#", " ")
Debug.Print "Fundstellen: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)
End If

End Function

Sub Wildcard_Suche()
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuche = "for*r"
Call Wildcard(strString, strSuche)

End Sub
Eine Wildcard-Suche nach "for*r" ergibt jetzt auch folgerichtig wortübergreifend: "foristisches Abenteuer".
Leider geht das Ganze nur bei Atillas Code, der Snb-Code ist zu formelspezifisch.

Grüße
Julia
Antworten Top
#13
Code:
Sub M_snb()
    c00 = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
    sn = Split("for*r", "*")
    
    sp = Split(c00, sn(0))
    For j = 1 To UBound(sp)
       c01 = c01 & vbLf & sn(0) & Split(sp(j), sn(1))(0) & sn(1)
    Next
    
    MsgBox c01
End Sub
Antworten Top
#14
Hi,

(01.03.2016, 12:50)snb schrieb: @Schülerin

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

ich gehe davon aus, daß Schülerin und juliatoll zwei Accounts derselben Person sind (u.a. bauen Beiträge inhaltlich aufeinander auf, eine führt thematisch Beitrag der anderen fort).
Antworten Top
#15
Hallo Snb,

ich verstehe deine beiden Lösungen nicht. Schaut man sich deinen ersten Code an, suchst du einfach nur nach Anfangs- und Endbuchstaben der durch Leerzeichen getrennten Wörter in einem String.
Gebe ich als Suchstring  "o*u" ein erhalte ich folglich als Ausgabe bei dem angegebenemTeststring keine Werte.

Und die zweite Lösung:
c00 = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer." 'Teststring
sn = Split("as*ue", "*")  'Suchstring

Die Ausgabe liefert dann:
as Clever-Excel Forum gibt viele ultrue
asuper Tipps. Es ist ein super Forum! Ein foristisches Abenteu

Der Code ist damit eigentlich unbrauchbar, bzw. liefert den für die Wildcardsuche interessierten Lesern dieses Threads in diesem Forum nicht die Hilfestellung wonach sie suchen.
Antworten Top
#16
Hallo Julia,

es kommt immer auf die Anforderungen an.

Wenn Du bei mir diesen teil;


Code:
And UBound(Split((Mid(strString, iPos - 1, intA - iPos + 1)))) = 0
 löschst,

erhalte ich das gleiche Ergebnis, wie Du.

So hatte ich das vorher.
Auf Grund der Zwischenfrage von Nora, habe ich den Code dann erweitert.
Weil Nora wieder andere Anforderungen gestellt hat.

Im übrigen kann der oben Eingestellte Codeteil auch bei Dir entfallen.
Gruß Atilla
Antworten Top
#17
Hallöchen,

als Zwischenergebenis stelle ich hier mal eine sehr einfach zu verstehende Codealternative ins Netz. Der Code funktioniert sowohl für einzelne Wörter als auch wortübergreifend.
Was ich allerdings bisher noch vermisse in diesem Thread ist der Königsweg bei der Wildcard-Suche. Die Suche mit regulären Ausdrücken, die bei richtiger Verwendung diese vielen Codezeilen von mir überflüssig machen dürfte.


Code:
Sub String_in_String_mit_Wildcards()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer, intB As Integer
strString = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuch = "as*ue"

intA = 1
While intA < Len(strString)
If InStr(intA, strString, Split(strSuch, "*")(0)) Then
intB = InStr(intA, strString, Split(strSuch, "*")(0))
If InStr(intB, strString, Split(strSuch, "*")(1)) Then
intA = InStr(intB, strString, Split(strSuch, "*")(1)) + Len(Split(strSuch, "*")(0))
strErgebnis = strErgebnis & intB & " " & Mid(strString, intB, intA - intB) & ","
End If
End If
intA = intA + 1
Wend

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

End Sub
Antworten Top
#18
Code:
Sub M_snb()
    c00 = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
    sn = Split("as*ue", "*")
    
    MsgBox Split(Mid(c00, InStr(c00, sn(0))), sn(1))(0) & sn(1)
End Sub
Antworten Top
#19
Aber:

"Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."

enthält nur eine 'richtige' string dem "as*ue" entspricht:


asuper Tipps. Es ist ein super Forum! Ein foristisches Abenteue
Antworten Top


Gehe zu:


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