Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Nur ganzes Wort in String suchen

Nur ganzes Wort in String suchen
18.01.2020 10:43:30
Dirk
Hallo,
ich möchte den Namen des Berliner Bezirks "Mitte" in einer großen Textmenge finden, die sich in einer Excel-Tabellenspalte befindet. Dazu habe ich eine Funktion geschrieben, die mit der InStr-Funktion das gut erledigt. Aber es werden natürlich auch Wörter wie "mittendrin", "miteinander" etc. gefunden, die natürlich nicht gemeint sind.
Kennt jemand eine einfache Möglichkeit, um nur ganze Wörter zu finden? Also wenn der Such-String vorne und hinten durch ein Satzzeichen wie Leerzeichen, Komma, Punkt, Semikolon etc. oder durch den Anfang oder das Ende des Strings begrenzt ist?
Vielen Dank für eure Gedanken!
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur ganzes Wort in String suchen
18.01.2020 10:52:54
Nepumuk
Hallo Dirk,
so:
Public Sub Test()
    Dim objRegEx As Object, objMatch As Object
    Dim strText As String
    strText = "mittendrin, Berliner Bezirks Mitte in einer mitteinander"
    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        .Global = True
        .Pattern = "\bmitte\b"
        .IgnoreCase = True
        Set objMatch = .Execute(strText)
    End With
    If objMatch.Count = 1 Then
        Call MsgBox(objMatch.Item(0))
    Else
        Call MsgBox("Nix gefunden")
    End If
End Sub

Gruß
Nepumuk
Anzeige
Alles Mitte
18.01.2020 11:59:30
lupo1
=(
LÄNGE(A1)-
LÄNGE(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(" "&A1&" ";"-Mitte ";" Mitte ");" Mitte ";" ");" Mitte,";" ,");" Mitte.";" .");" Mitte;";" ;");" Mitte!";" !");" Mitte?";" ?"))+2)/
LÄNGE("Mitte")
sollte eigentlich 99,9% erledigen, ohne VBA
Anzeige
AW: Alles Mitte
19.01.2020 22:11:38
Dirk
Hallo Nepumuk,
ja, RegEx ist die Lösung, die ich brauchte, vielen Dank!!! Meine komplette Funktion sieht nun so aus:
Public Function Mitte(txt As String) As String
Dim result As String
' den Ortsteil "Mitte" gesondert behandeln, da das Wort in vielen anderen vorkommt
' Über Regular Expressions nur nach ganzen Wörtern suchen:
Dim objRegEx As Object, objMatch As Object
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Global = True
.Pattern = "\bmitte\b"
.IgnoreCase = True
Set objMatch = .Execute(txt)
End With
If objMatch.Count = 1 Then
result = result & " Mitte"
End If
' die übrigen Ortsteilnamen dürfen auch in anderen Wörtern vorkommen (z. B. "Weddinger ...") _
If InStr(1, LCase(txt), "wedding") Then result = result & " Wedding"
If InStr(1, LCase(txt), "gesundbrunnen") Then result = result & " Gesundbrunnen"
If InStr(1, LCase(txt), "moabit") Then result = result & " Moabit"
If InStr(1, LCase(txt), "tiergarten") Then result = result & " Tiergarten"
Mitte = LTrim(result)
End Function

Anzeige
AW: Alles Mitte
19.01.2020 22:16:28
Dirk
Hallo Lupo1,
da ich nicht nur nach Mitte, sondern auch noch nach zig anderen suchen muss, ist VBA doch eleganter und bei meiner Riesenliste mit 60.000 Zeilen weniger ressourcenfressend.
Ganz herzlichen Dank auch für Deine Hilfe!
AW: Nur ganzes Wort in String suchen
19.01.2020 22:33:48
Dirk
Hallo Nepumuk,
ja, RegEx ist die Lösung, die ich brauchte, vielen Dank!!! Meine komplette Funktion sieht nun so aus:
Public Function Mitte(txt As String) As String
Dim result As String
' den Ortsteil "Mitte" gesondert behandeln, da das Wort in vielen anderen vorkommt
' Über Regular Expressions nur nach ganzen Wörtern suchen:
Dim objRegEx As Object, objMatch As Object
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Global = True
.Pattern = "\bmitte\b"
.IgnoreCase = True
Set objMatch = .Execute(txt)
End With
If objMatch.Count = 1 Then
result = result & " Mitte"
End If
' die übrigen Ortsteilnamen dürfen auch in anderen Wörtern vorkommen (z. B. "Weddinger ...") _
_
If InStr(1, LCase(txt), "wedding") Then result = result & " Wedding"
If InStr(1, LCase(txt), "gesundbrunnen") Then result = result & " Gesundbrunnen"
If InStr(1, LCase(txt), "moabit") Then result = result & " Moabit"
If InStr(1, LCase(txt), "tiergarten") Then result = result & " Tiergarten"
Mitte = LTrim(result)
End Function

Anzeige
AW: Nur ganzes Wort in String suchen
18.01.2020 11:36:05
Daniel
Hi
Wenn du mit Instr suchst, kannst du folgendes tun:
Erweitere den Suchbegriff um das Worttrennzeichen " " und suche nach " Mitte ".
Ggf muss man vorher noch im durchsuchten Text die Satzzeichen, welche ja auch direkt nach dem Wort folgen können, durch Leerzeichen ersetzen.
Wenn das gesuchte Wort auch am Anfang oder Ende stehen kann, muss man dort auch noch Leerzeichen anfügen, bevor man die Suche durchführt.
Zusätzlich kann man auch Instr so einstellen, dass die Groß/Kleinschreibung berücksichtigt wird.
Gruß Daniel
Anzeige
AW: Nur ganzes Wort in String suchen
19.01.2020 22:30:47
Dirk
Hallo Daniel,
danke für den Tipp, verwende ich an anderer Stelle auch schon. geht hier aber nicht, weil der Begriff nicht gefunden werden würde, wenn er am Anfang des Strings steht. Die RegEx-Lösung von Nepumuk war aber zielführend.
Vielen Dank für Deine Mithilfe!
Aua das tut weh
20.01.2020 08:07:11
Daniel
Lesen ist nicht so dein ding, oder?
Lies dir meinen Beitrag bitte nochmal vollständig durch und überdenke deine Antwort.
Gruß Daniel
Anzeige
AW: Aua das tut weh
20.01.2020 22:38:04
Dirk
Stimmt, habe ich übersehen, wäre auch gegangen, sorry.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nur ganze Wörter in Excel-Strings suchen


Schritt-für-Schritt-Anleitung

Um in Excel nach einem ganzen Wort in einem String zu suchen, kannst du die VBA-RegEx-Funktion verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und gehe zu Entwicklertools > Visual Basic.

  2. Füge ein neues Modul hinzu: Einfügen > Modul.

  3. Kopiere folgenden Code in das Modul:

    Public Function WortSuchen(txt As String, suchWort As String) As String
        Dim objRegEx As Object, objMatch As Object
        Set objRegEx = CreateObject("VBScript.RegExp")
    
        With objRegEx
            .Global = True
            .Pattern = "\b" & suchWort & "\b"
            .IgnoreCase = True
            Set objMatch = .Execute(txt)
        End With
    
        If objMatch.Count > 0 Then
            WortSuchen = "Gefunden: " & objMatch.Item(0)
        Else
            WortSuchen = "Nicht gefunden"
        End If
    End Function
  4. Speichere das Modul und verlasse den VBA-Editor.

  5. In einer Zelle kannst du jetzt die Funktion verwenden: =WortSuchen(A1, "Mitte"), wobei A1 die Zelle mit dem Text ist, in dem du suchen möchtest.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable oder With-Blockvariable nicht gesetzt."

    • Lösung: Stelle sicher, dass der RegEx-Objekt korrekt instanziiert wurde.
  • Fehler: "Nix gefunden", obwohl das Wort vorhanden ist.

    • Lösung: Überprüfe die Schreibweise und stelle sicher, dass das gesuchte Wort in der richtigen Form und ohne zusätzliche Zeichen vorliegt.

Alternative Methoden

Wenn du keine VBA-Funktion verwenden möchtest, kannst du auch mit Formeln arbeiten:

  1. Mit SUCHEN und WENN:

    =WENN(ISTZAHL(SUCHEN(" Mitte "; " " & A1 & " ")); "Gefunden"; "Nicht gefunden")
  2. Mit LÄNGE und WECHSELN (wie von lupo1 vorgeschlagen):

    =(LÄNGE(A1) - LÄNGE(WECHSELN(WECHSELN(WECHSELN(WECHSELN(" " & A1 & " "; " Mitte "; " "); " Mitte "; " "); " Mitte,"; " "); " Mitte."; " "))) / LÄNGE("Mitte")

Diese Methoden sind besonders nützlich, wenn du keine Programmierung verwenden möchtest.


Praktische Beispiele

Beispiel 1: Suche nach "Mitte"

  • In der Zelle A1 steht: "Der Bezirk Mitte ist bekannt."
  • Verwende die Formel =WortSuchen(A1, "Mitte"), um das Wort zu finden.

Beispiel 2: Suche nach mehreren Wörtern

  • Du kannst die Funktion erweitern, um nach mehreren Wörtern zu suchen. Füge einfach weitere Bedingungen in die Funktion WortSuchen hinzu.

Tipps für Profis

  • Nutze die Möglichkeit, die RegEx-Pattern anzupassen, um auch nach anderen Wörtern zu suchen.
  • Experimentiere mit der .IgnoreCase-Einstellung, um die Groß- und Kleinschreibung zu berücksichtigen.
  • Verwende VBA-Funktionen für große Datenmengen, da sie ressourcenschonender sind als komplexe Excel-Formeln.

FAQ: Häufige Fragen

1. Kann ich auch nach Teilstrings suchen? Ja, du kannst die RegEx-Pattern anpassen, um nach Teilstrings zu suchen, indem du das \b entfernst.

2. Funktioniert das in allen Excel-Versionen? Die VBA-Methode funktioniert in Excel-Versionen ab 2010. Formeln sind jedoch universell einsetzbar.

3. Was ist der Vorteil von RegEx gegenüber einfachen Excel-Suchfunktionen? RegEx ermöglicht eine präzisere Suche nach ganzen Wörtern und kann komplexere Muster erkennen, was die Suche effektiver macht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige