Anzeige
Archiv - Navigation
1944to1948
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

Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox

Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 08:30:23
marspoki2
Hallo Profis,

ich suche eine Möglichkeit eine Tabelle möglichst schnell mit mehreren Wörtern zu durchsuchen.

Es gibt ein USERFORM mit einer Textbox und einer Listbox zur Ergebnisanzeige.
Das Beispiel ist mal hier:
https://www.herber.de/bbs/user/162606.xlsm

Aktuell kann ich schon suchen, aber leider müssen die Daten genau eingegeben werden.


So stehen die Daten z.B. in der Tabelle

Brunnengasse – im Ortsteil Buch am Ahorn
Brunnenstraße – im Ortsteil Schillingstadt

Jetzt möchte ich gern in der Textbox "Brun" und "Aho" eingeben und in der Listbox soll dann nur Ergebnis "Brunnengasse – im Ortsteil Buch am Ahorn" angezeigt werden.

Wenn möglich das auch mit mehr als 2 Wörtern.

Geht sowas den? Vor allem ist es möglich eine Tabelle mit ca 2000 Zeilen so schnell zu durchsuchen?

Vielen Dank für Hilfe

Vielen Dank und Viele Grüße
Sebastian

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 09:32:15
Alwin Weisangler
Hallo Sebastian,

beispielhaft für 2 Spalten so:



Option Explicit

Private Sub TextBox1_Change()
Dim arrSuche, i&, j&
arrSuche = Split(TextBox1, ",")
ListBox1.Clear
With Tabelle1
For i = 0 To UBound(arrSuche)
For j = 2 To 100
If arrSuche(i) > "" And InStr(1, .Cells(j, 2), arrSuche(i)) > 0 Then
ListBox1.AddItem .Cells(j, 2)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(j, 3)
End If
Next j
Next i
End With
End Sub

https://www.herber.de/bbs/user/162611.xlsm

Gruß Uwe
Anzeige
AW: Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:10:18
Yal
Hallo Sebastian,

am besten mit Regular Expressions

'Unter Anbindung der Bibliotheken (VB-Editor, Extras, Verweise):

'_ Microsoft VBScript Regular Expressions 5.5

Public Function Mehrteilig_finden(R As Range, ParamArray Teile())
Dim Re As New RegExp
Dim E
Dim Erg

Re.Pattern = Join(Teile, "[\s\S]*")
Re.IgnoreCase = True
Erg = Array()
For Each E In R.Value 'Übernahme der Inhalt in einem Array
If Re.Test(E) Then
ReDim Preserve Erg(UBound(Erg) + 1)
Erg(UBound(Erg)) = E
End If
Next
Mehrteilig_finden = Erg
End Function

Sub Test()
Dim E
For Each E In Mehrteilig_finden(Worksheets("Tabelle1").Range("A1:A2"), "brun", "aho") 'in A1:A2 sin deine Test-Adresse abgelegt
Debug.Print E
Next
End Sub


VG
Yal
Anzeige
AW: Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 09:38:46
marspoki2
Hi Uwe,

das funktioniert leider nicht.

Ich möchte doch einfach nur

"Brun Aho" eingeben und dann soll nur noch

Brunnengasse – im Ortsteil Buch am Ahorn

in der Listbox stehen.

Vielleicht hat noch jemand eine Idee?

Vielen Dank
AW: Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:12:39
Oberschlumpf
Hi,

lösch innerhalb von TextBox1_Change erst mal alles, auch deinen alten Code.

Schreib dann ins Intialize-Ereignis diesen Code


Private Sub UserForm_Initialize()

Dim Typ_tabelle As Worksheet
Dim lloRow As Long

Set Typ_tabelle = Sheets("Tabelle1")

With ListBox1
.ColumnWidths = "0 cm; 15 cm;2 cm;0 cm;0 cm"
.ColumnCount = 5
.Clear
End With

With Typ_tabelle
For lloRow = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = lloRow
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(lloRow, 2)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(lloRow, 3)
Next
End With

End Sub


und schreib nun ins Private Sub TextBox1_Change() diesen Code



Dim arrSuche, liIdx As Integer, lloRow As Long, lboOK As Boolean
arrSuche = Split(TextBox1, " ")
ListBox1.Clear
With Tabelle1
For lloRow = 2 To 100
For liIdx = 0 To UBound(arrSuche)
If InStr(1, LCase(.Cells(lloRow, 2)), LCase(arrSuche(liIdx))) > 0 Then
lboOK = True
Else
lboOK = False
Exit For
End If
Next
If lboOK = True Then
ListBox1.AddItem lloRow
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(lloRow, 2)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(lloRow, 3)
End If
Next
End With

Bei mir läufts - bei dir auch?

Ciao
Thorsten
Anzeige
Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:23:50
marspoki2
Funktioniert klasse, vielen Dank
Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:30:07
Alwin Weisangler
Naja, dann nimmst du einfach statt des "," als Tenner " ".

anbei mal noch ein Weg wo die Spaltenzahl vorgegeben wird, die letzte Zeile der Tabelle in der Schleife verarbeitet wird und das Sammeln der Treffer in ein Array geladen wird, mit es schneller geht.


Private Sub TextBox1_Change()
Dim arrSuche, arrErg As Variant, iSpalten&, iSp&, i&, j&, k&
arrSuche = Split(TextBox1, " ")
iSpalten = 2
With Tabelle1
ReDim arrErg(1 To .Cells(Rows.Count, 2).End(xlUp).Row, 1 To 2)
For i = 0 To UBound(arrSuche)
For j = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
If arrSuche(i) > "" And InStr(1, .Cells(j, 2), arrSuche(i)) > 0 Then
k = k + 1
For iSp = 1 To iSpalten
arrErg(k, iSp) = .Cells(j, iSp + 1)
Next iSp
End If
Next j
Next i
End With
If k = 0 Then
ListBox1.Clear
Exit Sub
End If
arrErg = Application.WorksheetFunction.Transpose(arrErg)
ReDim Preserve arrErg(1 To iSpalten, 1 To k)
arrErg = Application.Transpose(arrErg)
With ListBox1
.ColumnCount = iSpalten
.List = arrErg
End With
End Sub


Gruß Uwe
Anzeige
Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:17:12
Yal
Hallo Sebastian,

"Vielleicht hat noch jemand eine Idee?"

Meine Idee wäre, Du liest den Code ganz genau (es sind ja keine chinesische Satzzeichen) und bemühst dich intensiv zu verstehen, was darin steht. Suche die Begriff, die Du noch nicht kennst in Internet: "VBA split".

Dann wirst Du sehr schnell drauf kommen, dass Du entweder "brun,aho" eintippen musst oder den Code in arrSuche = Split(TextBox1, " ") ändern musst.

Sorry für den -frendlich gemeinten- Tritt, aber ohne eine kräftige Mitwirkung des Fragenden gibt es in VBA kein richtiges Vorankommen ;-)

VG
Yal
Anzeige
Textbox (Suche) mit mehreren Wörtern und ausgabe in Listbox
31.08.2023 10:23:24
marspoki2
Moin, die version vom Oberschlumpf funktioniert perfekt

Bei dir steige ich nicht so ganz durch.

Trotzdem Danke an alle für die Hilfe

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige