Registriert seit: 29.09.2015
Version(en): 2030,5
01.03.2016, 17:16
(Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2016, 17:16 von snb.)
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:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Schülerin
Registriert seit: 10.09.2014
Version(en): 2013
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
Registriert seit: 29.09.2015
Version(en): 2030,5
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
02.03.2016, 23:05
(Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2016, 00:29 von Rabe.)
Hi, (01.03.2016, 13: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).
Registriert seit: 21.10.2014
Version(en): 2013
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 21.10.2014
Version(en): 2013
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
Registriert seit: 29.09.2015
Version(en): 2030,5
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
Registriert seit: 29.09.2015
Version(en): 2030,5
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
|