Registriert seit: 26.02.2020
Version(en): Office 365
Hallo Was muss im Code geändert werden, damit nicht in der ersten Spalte / A2..., sondern in der dritten Spalte / C2.... gesucht wird? Code: Private Sub TextBox1_Change() Dim i As Long Me.TextBox1 = Format(StrConv(Me.TextBox1, vbLowerCase)) Me.ListBox1.Clear For i = 2 To Tabelle1.Range("A1000000").End(xlUp).Row For X = 1 To Len(Tabelle1.Cells(i, 1)) a = Me.TextBox1.TextLength If LCase(Mid(Tabelle1.Cells(i, 1), X, a)) = Me.TextBox1 And Me.TextBox1 <> "" Then Me.ListBox1.AddItem Tabelle1.Cells(i, 1) Me.ListBox1.List(ListBox1.ListCount - 1, 1) = "0" & Tabelle1.Cells(i, 2) End If Next X Next i End Sub
LG Jana
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
die Zelladressierung lauten Cells(Zeile, Spalte). C wäre dann 3...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin und huihuihui! Bei jedem Tastenanschlag eine Schleife über Zellen laufen zu lassen und per .AddItem-Methode einer ListBox zuzuweisen, ist das Gegenteil von sportlich. Man entdeckt nämlich die Meditation der Langsamkeit … Ich bin da ganz bei shift-del aus dem anderen Thread: Du willst ein umfangreiches Userform programmieren, hast dazu aber nicht die erforderlichen Kenntnisse, um die zahlreichen Fallstricke zu umgehen. Damit Du aber nicht meinst, dass ich nur zum meckern hier bin: Nutze die .List-Eigenschaft der Listbox und bediene Dich der VBA.Filter-Funktion! Code: ListBox1.List = Filter(Split("Heinz Mainz keins"), "nz")
ergibt (blitzschnell) Heinz Mainz Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• schauan
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Ralf,
das mit der Filterfunktion in VBA hatte ich schon mal gesehen, aber nie richtig genutzt.
Ich war jetzt mal so frech und habe sie im anderen Beitrag von Jana genutzt, und zwar doch im Change Ereignis einer Textbox. Mal schauen, wie sich das insgesamt auf die Performance auswirkt, das habe ich noch nicht getestet.
Danke auch von mir für das Beispiel.
Gruß Atilla
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Ich habe es gesehen, attila! Die Performance dürfte besser sein als mit Range.Find zu arbeiten. Zwei Anmerkungen: Wenn ich per .List zuweise, brauche ich nicht vorher die .Clear-Methode anwenden. Deine Variablen dienen wohl eher der Übersichtlichkeit, sie sind aber nicht notwendig. In Deinem Beispiel reicht ein Einzeiler: Private Sub TextBox1_Change()
If Len(TextBox1.Text) Then _
ListBox1.List = Filter(Application.Transpose(Sheets(ComboBox_Suchauswahl.Text).Columns("C").Value), TextBox1)
End Sub Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Ralf, Danke für Deine Anmerkungen. Mit Clear hatte ich nachträglich rein genommen, weil aus irgendeinem Grunde die Liste bestehen blieb, obwohl keine Filterergebnisse vorlagen. Das konnte ich jetzt aber nicht mehr nachstellen, also kommt es weg. Dann wollte ich auch so einen Einzeiler, wie Du, aber warum auch immer, ich habe es nicht hinbekommen. Ob ich Value weggelassen hatte oder was auch immer. Dann bin ich den etwas umständlichen doppelt gemoppelten Weg gegangen. Hätte ich den Einzeiler hinbekommen, hätte ich den genommen.
Gruß Atilla
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
01.03.2020, 18:59
(Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2020, 19:48 von schauan.)
Hallo atilla,
eventuell in der Art:
arrA = Filter(WorksheetFunction.Transpose(Range("A1:A10").Value), "aal") bzw. direkt entsprechend Hinweis von Ralf Listbox1.List = Filter(WorksheetFunction.Transpose(Range("A1:A7").Value), "aal")
wobei der Filter Groß- und Kleinschreibung differenziert.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
01.03.2020, 19:46
(Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2020, 20:24 von atilla.)
Hallo Andre,
danke für die Hilfe, aber das ist mit Ralfs Einzeiler schon erklärt worden und ich konnte es schon Erfolgreich einsetzen.
Gruß Atilla
Registriert seit: 26.02.2020
Version(en): Office 365
(01.03.2020, 09:43)RPP63 schrieb: Nutze die .List-Eigenschaft der Listbox und bediene Dich der VBA.Filter-Funktion!
Code: ListBox1.List = Filter(Split("Heinz Mainz keins"), "nz")
ergibt (blitzschnell) Heinz Mainz Hallo Ralf, wie soll ich das umsetzen, wenn ich den Inhalt (in deinem Beispiel hinter Split: Heinz, Mainz, keins) "nicht kenne"? Es sind etwa 7500 Zeilen und teilweise 80 Zeichen in der Zelle. Ich kann da schwer alle Möglichkeiten zusammenfassen in einer Formel. Zudem wird sich die Liste erweitern. Mache ich einen Denkfehler? Eventuell habe ich auch nicht verstanden, was du mir mit dem Beispiel oben erklären möchtest. Kann "Heinz Mainz keins" auch ein Inhalt einer Spalte auf einem Tabellenblatt bzw. eine Tabelle auf einem Tabellenblatt sein? Kann "nz" auch der Inhalt einer Textbox (der Suchtext) sein? LG Jana
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Das hatte ich doch in #5 beantwortet, Jana! (und Attila im Nachbarthread umgesetzt)
Gruß Ralf
Nachtrag: Nimm es bitte nicht persönlich, aber ich bin der Meinung, dass Du Dich mit diesem Projekt übernimmst. Nutze doch zunächst die umfangreichen Möglichkeiten, die Dir "plain Excel" bietet.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
|