Frage von rolf777, 32

VBA Find ohne Sonderzeichen?

Hallo Zusammen

Ich bin an einem Excel-VBA-Projekt dran und habe ein Problem, dass ich nicht lösen kann.

Ich habe einen String, zum Beispiel "aus,". Ganz wichtig hier, am Schluss hat es ein Komma. Allerdings kommen Sonderzeichen nur am Schluss vor, das heisst nicht zwischen den Worten oder so.

Nun will ich mit der Find-Methode in einer Matrix A3:A554 suchen. Das ist nicht schwer, funktioniert mit folgendem Code:

suchString = "aus" Range("B1:B1500").Find(suchString, LookAt:=xlWhole)

Allerdings findet es das Wort logischerweise nicht, wenn zum Schluss noch ein Komma steht.

suchString = "aus,"

Weiss jemand, wie es geht, das er trotzdem sucht und findet, das Komma allerdings nicht weggelassen wird. Zum Beispiel in dem den String ein Zeichen kürzt oder so.

Grüsse Rolf

Expertenantwort
von Oubyi, Community-Experte für Excel, 18

Mit:

suchString = "aus" Range("B1:B1500").Find(suchString, LookAt:=xlPart)

würde alles gefunden, wo überhaupt ein *aus* in der Zelle vorkommt, egal was davor oder dahinter steht.

Hilft Dir das?
Oder habe ich Dich falsch verstanden?

Kommentar von rolf777 ,

Vielen Dank für die schnelle Antwort

Das Problem ist, dass es mit der ganzen Zelle vergleichen soll, da es auch Zellen mit ganzen Sätzen gibt, in denen "aus," vorkommt. 

Kommentar von Oubyi ,

Dann muss ich doch nochmal genauer nachfragen.
Du suchst also nach Zellen in den entweder "aus" oder "aus," steht?
Und sonst nichts?
Oder doch noch etwas anderes? Wie sind die Bedingungen genau.
Für obiges:

Sub aus()
Dim suchString1 As String
Dim suchString2 As String
Dim rngGefunden As Range
suchString1 = "aus"
suchString2 = "aus,"
Set rngGefunden = Range("B1:B1500").Find(suchString1, LookAt:=xlWhole)
If rngGefunden Is Nothing Then _
Set rngGefunden = Range("B1:B1500").Find(suchString2, LookAt:=xlWhole)
Debug.Print rngGefunden.Address
End Sub
Kommentar von Oubyi ,

P.S.: Oder - wenn auch andere Zeichen nach dem aus stehen können - halt

suchString2 = "aus?"

wie MarcoLutz vorschlägt.

Kommentar von Iamiam ,

ich fürchte, dass der zweite Teil  nur geht, wenn man alle aus am Ende nach Findung jedesmal eliminiert hat!

Bei der Lösung von MarcoLutz würde auch Maus (mit Leerzeichen oder . dahinter), Krause, Banause, baust, Faust, kaust, saust,..zerzaust,  genauso uvam ansprechen (mit xlpart).

Da Sonderzeichen ganz allgemein angesprochen wurden, habe ich folgendes Konzept in Angriff genommen (beliebig viele definierte Sonder- oder andere Zeichen):

  • 'Dim Suchstring, Findestring ' ggf. weitere, zB für Adressenliste
  • Findestring =Range("B1:B1500").Find(suchString, LookAt:=xlPart).Value
  • If Len(Findestring) = 3 Then 'goto Sprungmarke
  • If Len(Findestring) > 3 Then
  • Select Case Right(Findestring, 1)
  • Case ",", ";", ".", ":", "_" '(zu definierende Aufzählung)
  • 'End Select: goto Sprungmarke 'gibt es auch ein Exit Select?
  • 'End Select
  • End If
  • 'ggf gefundene Adressen listen, wie in diesem Zusammenhang zu findnext?


Ich steh aber sowohl mit find/findnext wie mit Select Case auf Kriegsfuß und schaffe es deshalb nicht, das zu integrieren. Wenn Du es für sinnvoll hältst: vllt kannst Du das i'wie ausschlachten?

Kommentar von Oubyi ,

Bevor ich mich da "reinknie", warte ich erst mal ab, ob sich der FS überhaupt noch für seine Frage interessiert und auf meine Nachfragen antwortet. Sonst ist das zu frustrierend und besonders interessant finde ich die Aufgabenstellung auch nicht, sodass ich das für MICH weiter verfolgen würde.

Kommentar von Oubyi ,

P.S.:
Exit Select gibt es nicht (nur Exit Sub und Exit For), macht aber auch imho keinen Sinn. Sobald eine Case-Bedingung erfüllt ist, springt VBA automatisch zu End Select, ohne die weiteren Bedingungen abzuarbeiten.
Ist also anders als in JAVA, wo bei switch jedesmal ein "Break" gesetzt werden muss.

Antwort
von MarcoLutz, 23

Hallo,

versuch's mal mir "aus?".

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten