Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1836to1840
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
String aus Textbox suchen
30.06.2021 13:47:40
Thomas
Hallo Excel Freunde,
ich suche mit diesen Codeteil:
varTeam = Me.TextBox7 'Me.FilterBox1.Text
varMonat = Me.TextBox8 ' Me.FilterBox2.Text
varStatus = Me.TextBox9 'Me.FilterBox3.Text
varStatus4 = Me.TextBox10 'Me.FilterBox4.Text
For lZeile = LBound(arrListeAlle) To UBound(arrListeAlle)
'ich glaube hier ist der wurm drinnen
If (varTeam = "(Alle)" Or varTeam = "" Or varTeam = arrListeAlle(lZeile, 2)) And _
(NrMonat = 0 Or NrMonat = Month(CDate(arrListeAlle(lZeile, 4)))) And _
(varStatus = "(Alle)" Or varStatus = "" Or varStatus = arrListeAlle(lZeile, 8)) And _
(varStatus4 = "(Alle)" Or varStatus4 = "" Or varStatus4 = arrListeAlle(lZeile, 9)) Then
lAnzahl = lAnzahl + 1
col.Add lZeile
End If
Next
~f~
den Wert aus der Textbox10. Mit der genaue Übereinstimmung funktioniert dies auch schon super.
Jetzt möchte ich diesen Teil so anpassen das ich nicht nach einer genauen Übereinstimmung suche, sondern nach einem Wortteil .
Oder besser ausgedrückt .
Ich suche in der Tabelle Spalte 9 alle Werte die den String aus der textbox10 enthalten.
Ich weis das dies irgendwie mit Like funktionieren müsste. Aber ich bekomme den Ausdruck einfach nicht hin.
Einer meiner derzeitigen Versuche like einzusetzen funktionieren leider nicht.
~f~
varStatus4 Like arrListeAlle(lZeile, 9)
~f~
hat jemand einen Rat für mich?
das ganze Marco sieht so aus:
~f~
Dim lZeile As Long
Dim lZeileMaximum As Long
Dim i As Integer
Dim lAnzahl As Long
Dim col As New Collection
Dim varTeam, varStatus4, varMonat, varStatus As String
Dim NrMonat As Integer
varTeam = Me.TextBox7 'Me.FilterBox1.Text
varMonat = Me.TextBox8 ' Me.FilterBox2.Text
varStatus = Me.TextBox9 'Me.FilterBox3.Text
varStatus4 = Me.TextBox10 'Me.FilterBox4.Text
For lZeile = LBound(arrListeAlle) To UBound(arrListeAlle)
'ich glaube hier ist der wurm drinnen
If (varTeam = "(Alle)" Or varTeam = "" Or varTeam = arrListeAlle(lZeile, 2)) And _
(NrMonat = 0 Or NrMonat = Month(CDate(arrListeAlle(lZeile, 4)))) And _
(varStatus = "(Alle)" Or varStatus = "" Or varStatus = arrListeAlle(lZeile, 8)) And _
(varStatus4 = "(Alle)" Or varStatus4 = "" Or varStatus4 Like arrListeAlle(lZeile, 9)) Then
lAnzahl = lAnzahl + 1
col.Add lZeile
End If
Next
If lAnzahl > 0 Then
'Array für Listendaten dimensionieren
ReDim arrListe(1 To lAnzahl, 1 To 22)
'Listendaten in Array einlesen
For lAnzahl = 1 To col.Count
lZeile = arrListeAlle(col(lAnzahl), 1)
arrListe(lAnzahl, 1) = lZeile
arrListe(lAnzahl, 2) = CStr(Tabelle1.Cells(lZeile, 1).Text)
arrListe(lAnzahl, 3) = CStr(Tabelle1.Cells(lZeile, 2).Text)
arrListe(lAnzahl, 4) = CStr(Tabelle1.Cells(lZeile, 3).Text)
arrListe(lAnzahl, 5) = CStr(Tabelle1.Cells(lZeile, 4).Text)
arrListe(lAnzahl, 6) = CStr(Tabelle1.Cells(lZeile, 5).Text)
arrListe(lAnzahl, 7) = CStr(Tabelle1.Cells(lZeile, 6).Text)
arrListe(lAnzahl, 8) = CStr(Tabelle1.Cells(lZeile, 7).Text)
arrListe(lAnzahl, 9) = CStr(Tabelle1.Cells(lZeile, 8).Text)
arrListe(lAnzahl, 10) = CStr(Tabelle1.Cells(lZeile, 9).Text)
arrListe(lAnzahl, 11) = CStr(Tabelle1.Cells(lZeile, 10).Text)
Next lAnzahl
Me.ListBox1.List = arrListe
Else
Me.ListBox1.Clear
End If
Set col = Nothing
Habt schon mal rechtvielen dank für euer interesse.
mfg thomas

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String aus Textbox suchen
30.06.2021 13:54:14
Daniel
Hi
die Abfrage ob Text A in Text B enthalten ist, geht so:

if B like "*" & A & "*" then
oder

if Instr(B, A) > 0 then
Gruß Daniel
AW: String aus Textbox suchen
30.06.2021 18:11:12
Thomas
Hallo Daniel,
besten dank das du dich damit beschäftigt hast.
Auch deine Erklärung ist super.
Aber ich glaube das ich ein wenig auf den Holzweg war.
Ich möchte gern eine Listbox über Textboxen Filtern. Eigentlich klappt mein jetziger Versuch schon ganz gut.
Nur da ist das Wort eigentlich. Denn es wird derzeit nur gefiltert wenn das Filterkriterium genau übereinstimmt. Deshalb dachte ich das man dies mit Like lösen kann.
Nun ja falsch gedacht.
Für mich ist wichtig das nach jeder Eingabe neu gefiltert wird Auch dann wenn in eine der Textboxen ein Buchstabe oder Zahl gelöscht wird.
Anbei ist mein derzeitiger stand.
https://www.herber.de/bbs/user/146886.xlsm
Ich habe ja im Netz noch eine andere Funktion gefunden. Aber ich weiss einfach nicht wie man diese anwenden kann.
'Suchen nach den eingegebenen Kriterien (ohne Unterscheidung von Gross/Klein-Schreibung)

Public Function Suchen_CT(Daten As Variant, _
SuchWerte As Variant, _
SuchSpalten As Variant, _
AusgabeSpalten As Variant, _
Optional blnTransponieren As Boolean = True) As Variant
On Error Resume Next
Dim i         As Long
Dim n         As Long
Dim j         As Integer
Dim k         As Integer
Dim blnExist  As Boolean
Dim blnNumber As Boolean
Dim avTemp    As Variant
Dim avOperator As Variant
Dim avSuch     As Variant
Dim vDatenWert As Variant
'Kriterien-Matrix ermitteln
For i = 0 To UBound(SuchWerte)
If IsArray(SuchWerte(i)) Then _
If j *": avOperator(i, j) = 1
Case avSuch(i, j) Like ">=*": avOperator(i, j) = 2
Case avSuch(i, j) Like "*":  avOperator(i, j) = 4
Case avSuch(i, j) Like " 2 Then avSuch(i, j) = Mid(avSuch(i, j), 3)
Case 4 To 6
If Len(avSuch(i, j)) > 1 Then avSuch(i, j) = Mid(avSuch(i, j), 2)
End Select
Select Case True
Case avSuch(i, j) Like "##.##.####"
'in Datum umwandeln
If IsDate(avSuch(i, j)) Then
If avSuch(i, j) = Format(CDate(avSuch(i, j)), "dd.mm.yyyy") Then
avSuch(i, j) = CDate(avSuch(i, j))
End If
End If
Case avSuch(i, j) Like "##:##*"
' in Uhrzeit umwandeln
If IsDate(avSuch(i, j)) Then
If avSuch(i, j) = Format(CDate(avSuch(i, j)), "hh:mm:ss") Or _
avSuch(i, j) = Format(CDate(avSuch(i, j)), "hh:mm") Then
avSuch(i, j) = CDate(avSuch(i, j))
End If
End If
Case IsNumeric(avSuch(i, j))
'in Zahl umwandeln
If VarType(Daten(1, SuchSpalten(i)))  8 Then
avSuch(i, j) = Val(Replace(avSuch(i, j), ",", "."))
End If
End Select
Next
Next
ReDim avTemp(1 To UBound(AusgabeSpalten) + 1, 1 To UBound(Daten))
'Suchen
For i = 1 To UBound(Daten)
blnExist = True
For k = 0 To UBound(SuchWerte)
If IsArray(SuchWerte(k)) Then 'prüfen auf Mehrfacheingabe
If SuchWerte(k)(0) = "OR" Then
'Oder-Verknüpfung
blnExist = False
For j = 1 To UBound(SuchWerte(k))
vDatenWert = Daten(i, SuchSpalten(k))
Select Case avOperator(k, j)
Case 1: If (vDatenWert  avSuch(k, j)) Then blnExist = True: Exit For
Case 2: If (vDatenWert >= avSuch(k, j)) Then blnExist = True: Exit For
Case 3: If (vDatenWert  avSuch(k, j)) Then blnExist = True: Exit For
Case 5: If (vDatenWert  avSuch(k, j)) Then blnExist = False: Exit For
Case 2: If Not (vDatenWert >= avSuch(k, j)) Then blnExist = False: Exit For
Case 3: If Not (vDatenWert  avSuch(k, j)) Then blnExist = False: Exit For
Case 5: If Not (vDatenWert  avSuch(k, 0)) Then blnExist = False: Exit For
Case 2: If Not (vDatenWert >= avSuch(k, 0)) Then blnExist = False: Exit For
Case 3: If Not (vDatenWert  avSuch(k, 0)) Then blnExist = False: Exit For
Case 5: If Not (vDatenWert 
Hast du oder jemand anderes möglicherweise einen anderen Ansatz?
mfg thomas
Anzeige
AW: String aus Textbox suchen
01.07.2021 09:37:55
Daniel
Hi
ich wüsste nicht, warum das mit dem LIKE nicht funktionieren sollte:
wenn ich in deinem Makro prcFilterListe() diese Prüfung:
If (varTeam = "(Alle)" Or varTeam = "" Or varTeam = arrListeAlle(lZeile, 2)) And _
so ummstelle
If (varTeam = "(Alle)" Or varTeam = "" Or arrListeAlle(lZeile, 2)) Like "*" & varTeam & "*" And _
dann funktioniert das mit der Anzeige bei Teilweiser übereinstimmung.
für die restlichen Textvergleiche in deiner IF_Prüfung musst du das natürlich auch entsprechen umstellen.
damit dieses komplexe IF nicht noch unübersichtlicher wird, kannst du die "*" ja schon gleich bei der Variablenzuweisung hinzufügen, dann musst du das nicht im IF machen:
dh mit dh mit varTeam = "*" & Me.TextBox7 & "*" 'Me.FilterBox1.Text
reicht dann: If (varTeam = "(Alle)" Or varTeam = "" Or arrListeAlle(lZeile, 2)) Like varTeam And _
auch den IF-Block kann man etwas übersichtlicher gestalten, wenn man anstatt der ANDs einen neuen IF_Block einschachtelt.
gibt zwar mehr Zeilen, aber du hast die Prüfung in mehrere Teile aufgeteilt, was z.B. die Fehlersuche vereinfacht:
also aus

IF A=B AND C=D Then
mach was
End IF
wird

IF A=B Then
IF C=D Then
mach was
end if
end if
Gruß Daniel
Anzeige
AW: String aus Textbox suchen
01.07.2021 19:11:55
Thomas
Hallo Daniel,
hab rechtvielen Dank für deine Hilfe.
Sorry das ich mich erst jetzt Melde.
Ich versuche gerade deine Tipps und Anregungen umzusetzen.
Aber ich bekomme es einfach nicht hin.
So wie ich es jetzt eingestellt habe geht es nur mit Zahlen. Sobald ich Text in den Spalten habe bekomme ich die Fehlermeldung
" Typen Unverträglichkeit ".
Mein derzeitiger Stand
varTeam = "*" & Me.TextBox7 & "*" 'Me.TextBox7 'Me.FilterBox1.Text
varStatus = "*" & Me.TextBox8 & "*" ' Me.FilterBox2.Text
varMonat = "*" & Me.TextBox9 & "*" 'Me.FilterBox3.Text
varStatus4 = "*" & Me.TextBox10 & "*" 'Me.FilterBox4.Text
lAnzahl = 0
For lZeile = LBound(arrListeAlle) To UBound(arrListeAlle)
'ich glaube hier ist der wurm drinnen
If (varTeam = "" Or arrListeAlle(lZeile, 2)) Like varTeam And _
(varStatus = "" Or arrListeAlle(lZeile, 3)) Like varStatus And _
(NrMonat = 0 Or NrMonat = Month(CDate(arrListeAlle(lZeile, 4)))) And _
(varStatus4 = "" Or arrListeAlle(lZeile, 5)) Like varStatus4 Then
lAnzahl = lAnzahl + 1
col.Add lZeile
End If
Next
Um besser durchzusehen habe ich das Beispiel noch ein wenig angepasst.
https://www.herber.de/bbs/user/146904.xlsm
Kannst du oder ein anderer Excelfreund sich dies nochmal anschauen?
Des weiteren habe ich noch eine kleine Tabelle mit Beispieldaten eingefügt.
Dann muss man diese zum Testen nicht immer neu schreiben.
mfg thomas
Anzeige
AW: String aus Textbox suchen
01.07.2021 22:16:58
Daniel
Ja deine Logik musst du nochmal durchdenken.
Vielleicht machst du es erstmal mit einer Textbox und nicht gleich mit allen 4.
Wenns mit einer klappt, dann weißt du ja wie es mit den anderen geht.
Gruß Daniel
AW: String aus Textbox suchen
02.07.2021 20:02:47
Thomas
Hallo Daniel,
ja ich glaube auch mein Ansatz ist falsch.
Hab trotzdem vielen dank für deine Hilfe.
mfg thomas
AW: String aus Textbox suchen
02.07.2021 20:11:32
Daniel
ich korrigiere halt ungern Fehler, die in der ursprünglichen Fassung eigentlich schon richtig waren.
Wenn du auf das "alle" verzichten kannst und dir die Leere Textbox reicht um alle anzeigen zu lassen, dann brauchst reicht das mit LIKE als einzige Prüfung aus
"beliebiger Text" LIKE "**" ergibt immer WAHR.
Gruß Daniel
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige