Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bei Suche, genaue Übereinstimmung

Bei Suche, genaue Übereinstimmung
Jockel
Hallo
ich lese mit folgenden Code Datensätze in eine Listbox:
With UserForm1
.ListBox1.Clear
Sheets("Daten").Activate
e = 0
For i = 15 To Cells(Rows.Count, 2).End(xlUp).Row 'ab Zeile 25
If InStr(LCase(Cells(i, 1).Value), LCase(.ListBox2.Value)) > 0 Then
.ListBox1.AddItem Cells(i, 1).Value
.ListBox1.Column(1, e) = Cells(i, 2).Value
.ListBox1.Column(2, e) = Cells(i, 3).Value
.ListBox1.Column(3, e) = Cells(i, 2).Hyperlinks(1).Address _
& IIf(Cells(i, 2).Hyperlinks(1).SubAddress <> "", "#" _
& Cells(i, 2).Hyperlinks(1).SubAddress, "")
.ListBox1.Column(4, e) = Cells(i, 6).Value
e = e + 1
Else
End If
Next i
End With
Ich habe zwei Listboxen. in der Listbox2 stehen KATEGORIEN drin. Wenn ich eine dieser KATEGORIEN anklicke, werden alle Datensätze aus der Mappe in die Listbox1 geladen, dieser KATEGORIEN in Spalte A entsprechen.
Das funktioniert soweit.
Ich habe nur das kleine Problem, wenn ich in Spalte A zB eine KATEGORIE "Kalender" und eine KATEGORIE "Kalenderwoche" habe und ich in der Listbox2 zB "Kalender" als Kriterium auswähle, dann läd es mir in die Listbox1 nicht nur die Datensätze mit "Kalender", sondern auch die mit "Kalenderwoche".
Oder alles was mit "Kalender" anfängt.
Ich möchte aber bei meiner Auswahl der KATEGORIEN auch wirklich nur diese Datensätze sehen.
Kann man bei der Suche der Datensätze was ändern, damit nur die ausgewählten DS kommen und nicht einfach stur von Links nach rechts durchgeschaut wird, walche Kriterien mit meiner Auswahl beginnen ?
Danke
Jockel
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Bei Suche, genaue Übereinstimmung
19.01.2011 08:21:14
Beverly
Hi Jockel,
mit deiner Zeile
InStr(LCase(Cells(i, 1).Value), LCase(.ListBox2.Value)) > 0 

prüfst du, od der Inhalt aus ListBox2 enthalten ist. Du müsstest also die Zeile so schreiben:
If LCase(Cells(i, 1)) = LCase(.ListBox2)

um eine genaue Übereinstimmung zu erreichen.


Anzeige
ah, Danke Karin, geht nun owT
19.01.2011 08:51:59
Jockel
;
Anzeige
Anzeige

Infobox / Tutorial

Exakte Übereinstimmung in Excel mit VBA und ListBox


Schritt-für-Schritt-Anleitung

Um eine exakte Übereinstimmung in einer ListBox in Excel VBA zu erreichen, kannst du den folgenden Code verwenden. Dieser stellt sicher, dass nur die Datensätze angezeigt werden, die exakt mit der Auswahl in der zweiten ListBox übereinstimmen.

With UserForm1
    .ListBox1.Clear
    Sheets("Daten").Activate
    e = 0
    For i = 15 To Cells(Rows.Count, 2).End(xlUp).Row 'ab Zeile 15
        If LCase(Cells(i, 1).Value) = LCase(.ListBox2.Value) Then
            .ListBox1.AddItem Cells(i, 1).Value
            .ListBox1.Column(1, e) = Cells(i, 2).Value
            .ListBox1.Column(2, e) = Cells(i, 3).Value
            .ListBox1.Column(3, e) = Cells(i, 2).Hyperlinks(1).Address _
                & IIf(Cells(i, 2).Hyperlinks(1).SubAddress <> "", "#" _
                & Cells(i, 2).Hyperlinks(1).SubAddress, "")
            .ListBox1.Column(4, e) = Cells(i, 6).Value
            e = e + 1
        End If
    Next i
End With

Achte darauf, dass die Zeile InStr durch den Vergleich = ersetzt wird, um eine genaue Übereinstimmung zu gewährleisten.


Häufige Fehler und Lösungen

  1. Problem: Es werden immer noch falsche Datensätze angezeigt.

    • Lösung: Stelle sicher, dass du den Vergleich mit = anstelle von InStr verwendest, wie oben beschrieben.
  2. Problem: Die ListBox bleibt leer.

    • Lösung: Überprüfe, ob die ListBox2 tatsächlich einen Wert hat und ob die Daten in Spalte A korrekt sind.

Alternative Methoden

Wenn du keine VBA-Lösung verwenden möchtest, kannst du auch die Funktion SVERWEIS in Excel nutzen, um exakte Übereinstimmungen zu finden. Hier ein Beispiel:

=SVERWEIS(A1;Daten!A:B;2;FALSCH)

Hierbei wird der Wert in A1 mit den Werten in der Spalte A des Blattes "Daten" verglichen. Die Option FALSCH sorgt für eine exakte Übereinstimmung.


Praktische Beispiele

  • Beispiel 1: Wenn du die Kategorie "Kalender" in ListBox2 auswählst, werden nur die Datensätze mit genau dieser Kategorie in ListBox1 angezeigt.
  • Beispiel 2: Bei Verwendung von SVERWEIS, kannst du damit schnell einen bestimmten Wert aus einer anderen Tabelle abrufen, solange die exakte Übereinstimmung gegeben ist.

Tipps für Profis

  • Nutze die .Find Methode in VBA, wenn du eine noch effizientere Suche durchführen möchtest:
Dim rng As Range
Set rng = Sheets("Daten").Range("A:A").Find(What:=.ListBox2.Value, LookAt:=xlWhole)
If Not rng Is Nothing Then
    ' Füge den gefundenen Datensatz zur ListBox hinzu
End If

Diese Methode ist besonders nützlich, wenn du große Datenmengen hast und die Suche beschleunigen möchtest.


FAQ: Häufige Fragen

1. Frage: Wie kann ich die Groß- und Kleinschreibung beim Vergleich ignorieren? Antwort: Verwende die Funktion LCase() oder UCase() um beide Werte in die gleiche Groß- oder Kleinschreibung zu konvertieren, bevor du sie vergleichst.

2. Frage: Kann ich auch mehrere Kategorien gleichzeitig vergleichen? Antwort: Ja, du kannst eine Schleife einfügen, um mehrere Werte aus ListBox2 zu überprüfen und entsprechend in ListBox1 anzuzeigen.

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