Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrspaltige Listbox filtern

mehrspaltige Listbox filtern
05.11.2021 09:36:22
Martin
Hallo zusammen,
ich habe eine mehrspaltige Listbox mit über 1700 Zeile welche ich gern Filtern möchte dass ich eine Zeile markieren kann.
aufgrund der Menge an Zeilen (und es werden mehr) dauert die normale Suche sehr lange, deswegen habe ich mir eine "Array" Code gesucht.
Leider schaffe ich es mit meinen einfachen VBA Kenntnissen nicht eine zweite Spalte einzufügen, sodass ich über die Textbox1 in allen Spalten suchen kann um die entsprechende Spalte in der Listbox zu markieren und dann später zu übertragen.
Könnte mit jemand bitte helfen?
Option Explicit
Private arrData As Variant

Private Sub UserForm_Initialize()
Dim lLastRow As Long
With Worksheets("Alle HFs im Überblick")
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
arrData = .Range(.Cells(4, 1), .Cells(lLastRow, 2)).Value
End With
With ListBox1
.ColumnCount = 2
.ColumnWidths = "3cm;8cm"
.List = arrData
.ListIndex = .ListCount - 1
End With
End Sub

Private Sub TextBox1_Change()
Dim zeile As Long
Me.ListBox1.Clear
Me.ListBox1.List = arrData
For zeile = Me.ListBox1.ListCount - 1 To 0 Step -1
If Not UCase(Me.ListBox1.List(zeile)) Like UCase(Me.TextBox1) & "*" Then Me.ListBox1.RemoveItem (zeile)
Next
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: mehrspaltige Listbox filtern
05.11.2021 09:52:55
Daniel
HI
wenn du eine Mehrspaltige Liste hast, musst du für einen Wert Zeilen- UND Spaltenindex angeben: Me.ListBox1.List(zeile, 0)
wenn du beide Spalten prüfen willst, musst du halt so prüfen (sinngemmäß):

IF Listbox-Spalte1 LIKE Text or Listbox-Spalte2 LIKE Textbox Then
um das von dir gewünschte in der erforderlichen Geschwindigkeit zu erreichen, könntest du vielleicht die Excel-Funkton FILTER verwenden (also die Formel-Funktion)
damit kannst du per einfacher Formel in einer Zelle die komplette gefilterte Tabelle in einer Zelle erstellen.
Dann könntest du von dort diese neue Tabelle in die Listbox laden oder du kannst die FILTER-Funktion direkt in VBA einsetzen:

Listbox1.List = Worksheetfunction.Filter(....)
genaueres kann ich dir nicht sagen, weil ich noch kein Excel 365 habe, aber so sollte es funktioniern und in dieser Variante auch genügend schnell sein um in Echtzeit zu deiner Schreibgeschwindigkeit die Listbox zu aktualisieren.
Gruß Daniel
Anzeige
AW: mehrspaltige Listbox filtern
06.11.2021 09:09:47
Martin
Vielen Dank für die zügige Antwort, so richtig weiter komme ich aber leider nicht.
AW: mehrspaltige Listbox filtern
07.11.2021 11:23:20
Piet
Hallo Martin
höfliche Frage: - warum die Listbox sortieren? Wenn der Arraybereich der Tabelle vorher von A-Z sortiert wird kannst du in der Listbox doch ganz bequem den Listeneintrag anspringen, indem du über die TexBox nach dem Index des 1. Eintrags sichst. Das geht auch mit einer Set Anweisung im Arraybereich der tabelle, denn der Zellbereich ist doch mit der ListBox identisch. Den Listbox Index ermitteln und diesen Eintrag in der Listbox anspringen dürte schneller gehen als dein Sortieren über For Next!
mfg Piet
Anzeige
AW: mehrspaltige Listbox filtern
07.11.2021 15:27:03
Piet
Nachtrag - noch ein Tipp. Falls möglich sollte man diese Datenmenge auf mehrere Listenfelder nach Kategorien aufteilen.
Für die Lagerhaltung einer Elektrofirma mit über 3.000 Einzelteilen nahm mich drei Listboxen zur Artikel Auswahl
Die erste nach Lieferanten, die zweite nach Kategorien wie: Kabel, Schalter, Relais und die dritte für die Artikelaufwahl
mfg Piet

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige