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

Forumthread: Wert suchen und in Listbox ausgeben

Wert suchen und in Listbox ausgeben
Timo
Hallo zusammen,
mit folgendem VBA-Code suche ich einen bestimmten Wert in einer Spalte und übergebe ihn und weitere Werte in eine Listbox.
Sub suchen()
Dim lng As Long
Dim i As Integer
i = 0
ListBox1.Clear
Sheets("Tabelle1").Activate
For lng = 2 To ActiveSheet.UsedRange.Rows.Count + 1
If InStr(LCase(Cells(lng, 1).Value), LCase(TextBox1.Value)) > 0 Then
ListBox1.AddItem Cells(lng, 1).Value
ListBox1.Column(1, i) = Cells(lng, 2).Value
ListBox1.Column(2, i) = Cells(lng, 3).Value
ListBox1.Column(3, i) = Cells(lng, 2).Row
i = i + 1
Else
End If
Next lng
End Sub
Jetzt ist es allerdings so, dass jeder Wert in der Spalte, in dem der gesuchte Wert vorkommt, in der Listbox angezeigt wird.
Bsp.: ich suche nach dem Wort "Haus"
In der Suchspalte stehen folgende Begriffe:
Haus
Haustür
Hauswand
Hausaufgaben
Jetzt werden alle 4 Begriffe in der Listbox angezeigt.
Wie muss ich meinen VBA-Code abändern, damit nur der gesuchte Wert angezeigt wird und nicht alle Werte, in denen Teile des gesuchten Wertes vorhanden sind? Gross- und Kleinschreibung sollten allerdings keine Rolle spielen.
Ich hoffe, ihr könnt mir helfen.
Vielen Dank und eine schönes Restwochenende...
Gruß Timo
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Wert suchen und in Listbox ausgeben
01.05.2011 10:34:26
Hajo_Zi
Hallo Timo
If LCase(Cells(lng, 1))= LCase(TextBox1) Then

AW: Wert suchen und in Listbox ausgeben
01.05.2011 10:46:02
Josef

Hallo Timo,
probiers so.
Sub suchen()
  Dim rng As Range
  Dim strFirst As String
  ListBox1.Clear
  With Sheets("Tabelle1")
    Set rng = .Range("A2:A" & .Rows.Count).Find(What:=TextBox1, LookIn:=xlValues, _
      LookAt:=xlWhole, MatchCase:=False, after:=.Cells(.Rows.Count, 1))
    If Not rng Is Nothing Then
      strFirst = rng.Address
      Do
        ListBox1.AddItem rng.Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = rng.Offset(0, 1).Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = rng.Offset(0, 2).Value
        ListBox1.List(ListBox1.ListCount - 1, 3) = rng.Row
        
        Set rng = .Range("A2:A" & .Rows.Count).FindNext(rng)
      Loop While Not rng Is Nothing And strFirst <> rng.Address
    End If
  End With
  Set rng = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Wert suchen und in Listbox ausgeben
01.05.2011 10:53:34
Peter
Hallo Timo,
ich würde es so versuchen:
Cells(lng, 1).Value = Trim$(Cells(lng, 1).Value)
If Left(LCase(Cells(lng, 1).Value), Len(TEXTBOX1.Value)) = LCase(TEXTBOX1.Value) Then
wobei ich lieber die Find-Methode mit LookAt:=xlWhole verwenden würde, allein schon aus Performance Gründen.
Gruß Peter
Anzeige
AW: Wert suchen und in Listbox ausgeben
01.05.2011 16:52:54
Timo
Funktioniert alles super,
vielen Dank!!!
Gruß Timo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Wert suchen und in Listbox ausgeben


Schritt-für-Schritt-Anleitung

Um einen bestimmten Wert in einer Excel-Liste zu suchen und diesen in einer Listbox anzuzeigen, kannst Du den folgenden VBA-Code verwenden. Dieser Code stellt sicher, dass nur exakte Übereinstimmungen gefunden werden und die Groß-/Kleinschreibung keine Rolle spielt.

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu.
  3. Kopiere und füge diesen Code ein:
Sub suchen()
    Dim rng As Range
    Dim strFirst As String
    ListBox1.Clear
    With Sheets("Tabelle1")
        Set rng = .Range("A2:A" & .Rows.Count).Find(What:=TextBox1, LookIn:=xlValues, _
            LookAt:=xlWhole, MatchCase:=False, after:=.Cells(.Rows.Count, 1))
        If Not rng Is Nothing Then
            strFirst = rng.Address
            Do
                ListBox1.AddItem rng.Value
                ListBox1.List(ListBox1.ListCount - 1, 1) = rng.Offset(0, 1).Value
                ListBox1.List(ListBox1.ListCount - 1, 2) = rng.Offset(0, 2).Value
                ListBox1.List(ListBox1.ListCount - 1, 3) = rng.Row
                Set rng = .Range("A2:A" & .Rows.Count).FindNext(rng)
            Loop While Not rng Is Nothing And strFirst <> rng.Address
        End If
    End With
End Sub
  1. Schließe den VBA-Editor und teste den Code in Deiner Excel-Anwendung.

Häufige Fehler und Lösungen

Fehler: Die Listbox zeigt weiterhin unerwünschte Werte an.

Lösung: Stelle sicher, dass Du die LookAt:=xlWhole-Option in der Find-Methode verwendest. Dies verhindert, dass Teilübereinstimmungen angezeigt werden.


Alternative Methoden

Wenn Du nach einer alternativen Methode suchst, um Werte ohne VBA zu filtern, kannst Du die Funktion FILTER in Excel verwenden (verfügbar in Excel 365):

=FILTER(A2:A100, A2:A100=TextBox1.Value)

Diese Funktion gibt nur die exakten Übereinstimmungen zurück und kann einfach in eine Zelle eingefügt werden.


Praktische Beispiele

Hier sind einige Beispiele für die Verwendung des Codes:

  • Suchen nach "Haus": Wenn die Spalte A die Werte "Haus", "Haustür", "Hauswand" und "Hausaufgaben" enthält, wird nur "Haus" in der Listbox angezeigt, wenn die Suche exakt ist.
  • Suchen nach "Auto": Für die Werte "Auto", "Autoreifen" und "Autowäsche" wird nur "Auto" angezeigt, wenn die Find-Methode korrekt implementiert ist.

Tipps für Profis

  • Optimierung: Verwende die Find-Methode, um die Performance zu verbessern, insbesondere bei großen Datenmengen.
  • Benutzerfreundlichkeit: Füge eine Fehlerbehandlung hinzu, um den Benutzer zu informieren, wenn kein Wert gefunden wurde.
  • Datenbereinigung: Stelle sicher, dass die Daten in Deiner Excel-Tabelle sauber sind, um unerwartete Ergebnisse zu vermeiden. Nutze Trim und LCase, um Leerzeichen und Groß-/Kleinschreibung zu berücksichtigen.

FAQ: Häufige Fragen

1. Warum wird die Find-Methode empfohlen? Die Find-Methode ist effizienter und bietet bessere Performance, insbesondere bei großen Datenmengen.

2. Wie kann ich die Listbox mit weiteren Informationen füllen? Du kannst zusätzliche Spaltenwerte von der gefundenen Zelle verwenden, indem Du Offset in der Listbox verwendest.

3. Was mache ich, wenn ich keine Übereinstimmungen finde? Füge eine einfache Fehlerbehandlung hinzu, um den Benutzer zu informieren, dass keine Übereinstimmungen gefunden wurden.

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