Durchsuchen von Tabellen - mehrere Wörter auf einmal suchen

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Durchsuchen von Tabellen - mehrere Wörter auf einmal suchen

    Hallo zusammen,

    ich stehe vor einem Problem und hoffe das ihr helfen könnt. Ich habe eine Makro zum durchsuchen von Excel-Tabellen gefunden und für meine Verhältnisse angepasst:

    Sub Suche()
    Dim c As Range
    Dim Suchwert As Variant
    Dim ersterFundort As String
    Dim i As Integer, z As Long
    Dim ws1 As Worksheet
    z = 1
    Set ws1 = Sheets("Tabelle1") 'anpassen
    Suchwert = InputBox("Bitte geben Sie die Kommission oder den Namen des Projekts ein nachdem Sie suchen möchten!", "Sortieren")
    If Suchwert <> "" Then
    For Each ws In Sheets
    If ws.Name = "Suche" Then
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True
    End If
    Next
    Sheets.Add after:=Sheets(Sheets.Count)
    Set ws = ActiveSheet
    ws.Name = "Suche"
    Set c = ws1.Cells.Find(what:=Suchwert, LookIn:=xlValues, Lookat:=xlPart)
    If Not c Is Nothing Then
    Do Until c Is Nothing Or c.Address = ersterFundort
    If ersterFundort = "" Then ersterFundort = c.Address
    z = z + 1
    With ws
    c.EntireRow.Copy .Rows(z)
    End With
    Set c = ws1.Cells.FindNext(c)
    Loop
    End If
    Set c = Nothing
    ersterFundort = ""
    End If
    End Sub

    Soweit funktioniert das auch ganz gut. Was ich allerdings gerne noch verbessern würde:

    Wenn man mehrere Worte eingibt, so scheint die Reihenfolge irgendwie wichtig zu sein z.B VW Golf wird erkannt, weil es so in der Tabelle steht. Golf VW hingegen ergibt keinen Treffer.

    Hat jemand eine Idee was ich ändern kann/muss?

    Ich bin dankbar für jeden Hinweis!
    Nur mit .Find gibt es keine Lösung für dein Problem.
    Du kannst dem .Find einen Suchbegriff mitgeben und genau diesen sucht er in den Teilen einer Zelle zu finden.

    Du möchtest Zelltexte nach beliebigen Wortkombinationen durchsuchen.
    Da gibt's nur folgende Möglichkeit.

    Splitte deinen Suchbegriff in Worte (Split-Funktion)
    Suche mit .Find das erste Wort.
    Wenn gefunden: Suche alle anderen Worte in der gefundenen Zelle mit Instring
    Wenn alle Worte gefunden sind ist der komplette Suchbegriff Begriff gefunden, wenn nicht suche die nächste Zelle mit .FindNext und mach dort dasselbe.

    Ansatz für die Zellsuche:

    Visual Basic-Quellcode

    1. Function CellContains(ByVal c as Range, ByVal SearchString as String, Optional ByVal BeginAfter as Integer:=1) as Boolean
    2. Words=Split(Trim(SearchString)) '0-basiertes Array
    3. For i = BeginAfter to UBound(Words) 'skip loop if too few searchwords
    4. If Instr(c.Value,Words(i), vbTextCompare) = 0 Then Exit Function 'Wort existiert nicht -> Return False
    5. Next
    6. CellContains = True 'alle Worte gefunden oder SearchString ist kürzer als BeginAfter
    7. End Function

    Das erste Wort brauchst du nicht nochmals suchen, da es ja bereits mit .Find gefunden wurde, deshalb BeginAfter:=1
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()