Mehrfachsuche in Listbox
Guten Abend zusammen,
ich bräuchte mal wieder Hilfe.
Und zwar möchte ich
eine Suche über alle Spalten in einer Listbox laufen lassen
dabei sollen alle Suchbegriffe abgefragt werden.
Beispiel:
Das Marko soll z.B. in jeder Zeile der Listbox prüfen, ob dort ein oder mehrere dieser Begriffe vorkommen: "Hosen" "Herren" "Peter"
Hier mal eine kleine Datei, die Listbox wird beim Öffnen der Userform geladen.
VBA_Test.xlsm
Vielleicht hat jemand eine Idee, wie man das umsetzen kann.
Vielen Dank
Gruß
ich bräuchte mal wieder Hilfe.
Und zwar möchte ich
eine Suche über alle Spalten in einer Listbox laufen lassen
dabei sollen alle Suchbegriffe abgefragt werden.
Beispiel:
Das Marko soll z.B. in jeder Zeile der Listbox prüfen, ob dort ein oder mehrere dieser Begriffe vorkommen: "Hosen" "Herren" "Peter"
Hier mal eine kleine Datei, die Listbox wird beim Öffnen der Userform geladen.
VBA_Test.xlsm
Vielleicht hat jemand eine Idee, wie man das umsetzen kann.
Vielen Dank
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2969587568
Url: https://administrator.de/forum/mehrfachsuche-in-listbox-2969587568.html
Ausgedruckt am: 22.12.2024 um 07:12 Uhr
8 Kommentare
Neuester Kommentar
Hattest du hier schon mal gefragt . Code dafür findest du hier:
Listbox nach String der Reihe nach Suchen und markieren (SpinButton)
Mir den mehreren Begriffen in der selben Box machst du dann einfach ein Split() an den Leerzeichen und itterierst mit einem for-Loop über die einzelne Begriffe innerhalb des Loops in dem der Inhalt der Zelle geprüft wird.
Grüße Uwe
Listbox nach String der Reihe nach Suchen und markieren (SpinButton)
Mir den mehreren Begriffen in der selben Box machst du dann einfach ein Split() an den Leerzeichen und itterierst mit einem for-Loop über die einzelne Begriffe innerhalb des Loops in dem der Inhalt der Zelle geprüft wird.
Grüße Uwe
Zitat von @mreske:
Hallo Uwe,
ja stimmt, so etwas Ähnliches hatte ich wohl schon mal,
Dieses Mal sollen aber in der Listbox nur die Treffer angezeigt werden.
Da komme ich nicht weiter.
Gruß
Hallo Uwe,
ja stimmt, so etwas Ähnliches hatte ich wohl schon mal,
Dieses Mal sollen aber in der Listbox nur die Treffer angezeigt werden.
Da komme ich nicht weiter.
Gruß
Auch das hatte ich mit dir hier schon durch 🙂.
Spalte E nach beliebig vielen Suchbegriffen (mit Leerzeichen getrennt) durchsuchen und in Listbox ausgeben
Zitat von @mreske:
Was ich eigentlich wollte war:
1. Es soll immer nur eine Zeile markiert werden, wenn ALLE Suchbegriffe darin vorkommen.
In meinem Beispiel soll die Zeile nur markiert werden, wenn in ihr "Hosen" + "Herren" + "Peter" vorkommen.
OK.Was ich eigentlich wollte war:
1. Es soll immer nur eine Zeile markiert werden, wenn ALLE Suchbegriffe darin vorkommen.
In meinem Beispiel soll die Zeile nur markiert werden, wenn in ihr "Hosen" + "Herren" + "Peter" vorkommen.
2. Danach möchte ich die NICHT markierten Zeilen über die RemoveItem löschen
Das geht bei einer Listbox nicht wenn du die Eigenschaft RowSource verwendest. Damit bindest du eine Listbox an einen Datenbereich, und deswegen kannst du hier die Methode RemoveItem nicht nutzen, die funktioniert damit nicht! Das geht nur wenn man die List Eigenschaft auf einen Range setzt.Der Workaround hierfür besteht darin entweder die Listbox ungebunden zu erstellen, die Zeilen im Sheets zu suchen und dann der Listbox über AddItem hinzuzufügen, oder das Sheet zu durchsuchen und die Suchergebnisse auf ein verstecktes Sheet zu schreiben und die Row-Source auf die Suchergebnisse des unsichtbaren Sheets zu setzen.
Die erste Methode hat den Nachteil das sie max 10 Spalten unterstützt, du hast aber 11 Spalten deswegen ist Variante 2 bei dir vorzuziehen. Diese Methode habe ich dir in folgendem Sheet zusammengestellt:
search_form_multiterm_2969587568.zip
Grüße Uwe
In meiner Vorlage hast du ja die Variable cell, und damit bekommst du auch die Position der Zeile im Sheet mit cell.Row. davon brauchst du nur 2 abziehen (Header und 0 basierter Index), und mit dem Index kannst du markieren wie du lustig bist
Und wie kann ich danach die nicht markierten Zeilen löschen?
Ebenso über den o.g Row-Index
Und wie kann ich danach die nicht markierten Zeilen löschen?
Geht das in einer ungebundenen Multiselect Listbox?
Ja, aber wozu aufwändig löschen wenn man sowieso nur die Suchfunde in die Listbox einträgt? Dann entfällt das überflüssige Löschen. Mach es also gleich vernünftig. Nimmt die Tabelle nämlich an Einträgen zu ist sie am Ende länger damit beschäftigt Zeilen zu löschen = ineffizient, solltest du mal drüber nachdenken ...