Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Find funktioniert nicht richtig

Forumthread: Find funktioniert nicht richtig

Find funktioniert nicht richtig
03.05.2016 08:08:52
Oisse
Guten Morgen Zusammen,
ich habe das Problem, dass ich nach einer exakten Zeichenfolge suchen muss.
Wenn diese Zeichenfolge nicht genau ist, dann soll der Vorgang abgebrochen werden.
Ich habe dazu folgenden Code, der so auch funktioniert aber warum funktioniert die find Methode nicht auf Exaktheit?
Set wsSearch = ThisWorkbook.Sheets(Tbl2)
'Suche in der Mappe in Spalte W (Wert der Zelle muss in diesem Fall komplett ü _
bereinstimmen, wenn das nicht gewünscht ist LookAt:= auf xlPart ändern)
With wsSearch.Range("W:W")
Set c = .Find(strFind, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then    'Wenn die Vorgangsnummer nicht vorhanden oder falsch ist,  _
dann den Vorgang abbrechen
If MsgBox("Diese Vorgangsnummer ist nicht vorhanden", vbOKOnly, "Achtung") =  _
vbOK Then
Exit Sub
End If
End If
If Not c Is Nothing Then
firstAddress = c.Address
Range(c.Address).Select      'Die Zeile in der der zu suchende Wert ist  _
markieren
Do
Union(Selection, Range(c.Address)).Select     'alle Zeilen in denen der zu  _
suchende Wert vorkommt markieren
If IsEmpty(c.Offset(0, -3)) Then            'Wenn Spalte "T" (Verkaufspreis" _
) leer ist, dann den Vorgang abbrechen
If MsgBox("Es ist noch kein Verkaufspreis eingegeben", vbOKOnly, "Achtung") _
= vbOK Then
Exit Sub
End If
End If
'Finde den nächsten passenden Eintrag
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If

Wird nämlich irgendein Wert eingegeben, dann werden die Werte aus der Zeile ausgegeben, bei der eine Zelle markiert ist.
Warum? Ich verstehs nicht.
Könnte mir das bitte jemand erklären?

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Find funktioniert nicht richtig
03.05.2016 08:32:50
Werner
Hallo,
Set c = .Find(strFind, LookIn:=xlValues, MatchCase=True, LookAt:=xlWhole)

Gruß Werner

AW: Find funktioniert nicht richtig
03.05.2016 10:37:48
Peter
Hallo Werner,
du solltest als erstes im Modul Option Explicit schreiben und dann alle Variablen deklarieren und auch End With einfügen, vielleicht läuft es dann einwandfrei.
Gruß Peter

Anzeige
AW: falscher Ansprechpartner
03.05.2016 10:47:45
Werner
Hallo Peter,
falscher Ansprechpartner.
Gruß Werner

AW: falscher Ansprechpartner
03.05.2016 12:09:44
Peter
Hallo Werner,
da hast du natürlich ganz recht, tut mir leid.
Gruß Peter

AW: Find funktioniert nicht richtig
03.05.2016 13:59:23
Oisse
Hallo Werner, hallo Peter,
vielen Dank für eure Antworten.
Der gepostete Code war nur ein Codeschnipsel. Es kommt dann noch End With.
Ich habe die Zeile
Set c = .Find(strFind, LookIn:=xlValues, MatchCase=True, LookAt:=xlWhole)

so eingegeben. Jetzt kommt die Fehlermeldung: Syntaxfehler
Ich habe dann Option Explicit gesetzt.
Es kommt die gleiche Fehlermeldung
Allerdings geht es bei MatchCase um die Groß und Kleinschreibung, wenn ich das richtig verstanden habe.
Bei mir ist es allerdings so, dass keine Fehlermeldung kommt oder etwas abgebrochen wird, wenn ein völlig falscher Wert in der Inbox eingegeben wird.
Wenn ich bspw. Al 12 eingebe obwohl das nicht vorhanden ist, werden trotzdem Daten geliefert und zwar diejenige Zeile, in der eine markierte Zelle ist.
Der Code bis End With sieht folgendermaßen aus:
Option Explicit
Private Sub OptionButton2_Click()
Dim wsSearch    As Worksheet
Dim c           As Range
Dim wsTarget    As Worksheet
Dim strFind     As String
Dim firstAddress As String
Dim arrFiles    As Variant
Dim arrSheets   As Variant
Dim i           As Integer
Dim int_Counter As Integer
Dim int_Column  As Integer
Dim rng_Row As Range
'Hier wird in einer InputBox eine Vorgansnummer eingegeben
'Nach dieser Nummer wird in Spalte W gesucht und alle Zeilen, in denen diese Nummer  _
vorkommt selektiert
Unload UserForm1
strFind = InputBox("Bitte Vorgangsnummer eingeben", "Vorgangsnummer")
Tbl2 = "Artikel" 'Tabellenblatt aus dem die Daten geholt werden sollen
arrFiles = Array(ThisWorkbook.Path & "Artikelliste.xlsm")
'Namen der Sheets in der entsprechenden Reihenfolge der oben angeführten Dateien
arrSheets = Array(Tbl2)
'Screenflicker unterdrücken
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Alle Dateien im Array verarbeiten
For i = 0 To UBound(arrFiles)
'Mappe öffnen
Set wsSearch = ThisWorkbook.Sheets(Tbl2)
'Suche in der Mappe in Spalte W (Wert der Zelle muss in diesem Fall komplett ü _
bereinstimmen, wenn das nicht gewünscht ist LookAt:= auf xlPart ändern)
With wsSearch.Range("W:W")
Set c = .Find(strFind, LookIn:=xlValues, LookAt:=xlWhole)
'If c Is Nothing Then    'Wenn die Vorgangsnummer nicht vorhanden oder falsch ist,  _
dann den Vorgang abbrechen
'If MsgBox("Diese Vorgangsnummer ist nicht vorhanden", vbOKOnly, "Achtung") =  _
vbOK Then
'Exit Sub
'End If
'End If
If Not c Is Nothing Then
firstAddress = c.Address
Range(c.Address).Select      'Die Zeile in der der zu suchende Wert ist  _
markieren
Do
Union(Selection, Range(c.Address)).Select     'alle Zeilen in denen der zu  _
suchende Wert vorkommt markieren
If IsEmpty(c.Offset(0, -3)) Then            'Wenn Spalte "T" (Verkaufspreis" _
) leer ist, dann den Vorgang abbrechen
If MsgBox("Es ist noch kein Verkaufspreis eingegeben", vbOKOnly, "Achtung") _
= vbOK Then
Exit Sub
End If
End If
'Finde den nächsten passenden Eintrag
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
' schließe die Mappe
'wsSearch.Parent.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Ab hier erfolgt dann das Auslesen der Daten aus den entsprechenden Zellen der oben  _
selektierten Zeilen
'und die Zuordnung in die Tabelle Rechnung

Den Teil mit der Fehlermeldung bei nicht vorhandener Vorgangsnummer ist hier weggeschaltet, funktioniert aber.
Ich versteh nur nicht, warum ich Daten bekomme, wenn doch der Wert, der in der Inbox steht, gar nicht vorhanden ist und folglich auch gar nicht gefunden werden kann.
Warum nimmt mir das Programm dann die Werte aus der Zeile, in der sich eine selektierte Zelle befindet.
Wo ist mein Denkfehler? Oder liegt es an Union(Selection...)?

Anzeige
AW: Find funktioniert nicht richtig
03.05.2016 12:19:07
Peter
Hallo Oisse,
Hallo Werner,
du solltest als erstes im Modul Option Explicit schreiben und dann alle Variablen deklarieren und auch End With einfügen, vielleicht läuft es dann einwandfrei.
Dann solltest du noch zusehen, dass deine zu suchenden Begriffe ohne evtl. führende/nachfolgende Leerstellen zur Verfügung stehen.
Gruß Peter
Anzeige
;
Anzeige

Infobox / Tutorial

Find-Methode in Excel: So funktioniert die exakte Suche


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und wechsle zu dem Blatt, in dem du suchen möchtest.

  2. Stelle sicher, dass die zu suchende Zeichenfolge korrekt ist und keine führenden oder nachfolgenden Leerzeichen enthält.

  3. Verwende den folgenden VBA-Code, um die exakte Suche durchzuführen:

    Option Explicit
    Private Sub OptionButton2_Click()
       Dim wsSearch As Worksheet
       Dim c As Range
       Dim strFind As String
       strFind = InputBox("Bitte Vorgangsnummer eingeben", "Vorgangsnummer")
       Set wsSearch = ThisWorkbook.Sheets("Artikel")
    
       With wsSearch.Range("W:W")
           Set c = .Find(strFind, LookIn:=xlValues, LookAt:=xlWhole)
           If c Is Nothing Then
               MsgBox "Diese Vorgangsnummer ist nicht vorhanden", vbOKOnly, "Achtung"
           Else
               ' Weitere Verarbeitung hier
           End If
       End With
    End Sub
  4. Füge den Code in ein Modul deines VBA-Editors ein und führe ihn aus.


Häufige Fehler und Lösungen

  • Syntaxfehler: Achte darauf, dass alle Variablen deklariert sind und die End With-Anweisung vorhanden ist.
  • Keine exakte Suche: Stelle sicher, dass LookAt:=xlWhole in der Find-Methode gesetzt ist, damit nur exakte Übereinstimmungen gefunden werden.
  • Daten aus falschen Zeilen: Wenn Du Daten aus einer Zeile erhältst, in der eine markierte Zelle ist, könnte es daran liegen, dass die Variable Selection verwendet wird. Vermeide dies, um unerwünschte Ergebnisse zu verhindern.

Alternative Methoden

Falls die Find-Methode nicht die gewünschten Ergebnisse liefert, kannst du auch die AutoFilter-Methode verwenden. Hier ein einfaches Beispiel:

wsSearch.Range("W:W").AutoFilter Field:=1, Criteria1:=strFind

Diese Methode filtert die Daten und zeigt nur die Zeilen an, die mit der eingegebenen Vorgangsnummer übereinstimmen.


Praktische Beispiele

  1. Exakte Suche in einer Liste: Verwende die Find-Methode, um in einer Spalte nach einer bestimmten Artikelnummer zu suchen und die entsprechenden Zeilen hervorzuheben.

  2. Fehlersuche in Formularen: Kombiniere die Find-Methode mit der MsgBox, um Benutzer über falsche Eingaben zu informieren, wie im folgenden Code:

    If c Is Nothing Then
       MsgBox "Fehler: Vorgangsnummer nicht gefunden."
    End If

Tipps für Profis

  • Nutze MatchCase:=True, wenn die Groß- und Kleinschreibung bei der Suche wichtig ist.
  • Teste den Code immer mit verschiedenen Eingaben, um sicherzustellen, dass alle Szenarien abgedeckt sind.
  • Überlege, ob Du die Trim-Funktion verwenden möchtest, um sicherzustellen, dass keine unerwünschten Leerzeichen in die Suche einfließen.

FAQ: Häufige Fragen

1. Warum funktioniert die Find-Methode manchmal nicht? Die Find-Methode funktioniert möglicherweise nicht, wenn die Suchparameter nicht korrekt gesetzt sind oder wenn führende/nachfolgende Leerzeichen in der Suche enthalten sind.

2. Wie kann ich sicherstellen, dass die Suche nur exakte Übereinstimmungen findet? Verwende den Parameter LookAt:=xlWhole in der Find-Methode, um nur exakte Übereinstimmungen zu erhalten.

3. Was ist der Unterschied zwischen LookAt:=xlWhole und LookAt:=xlPart? LookAt:=xlWhole sucht nach einer exakten Übereinstimmung, während LookAt:=xlPart auch Teilübereinstimmungen findet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige