Suchbereich ändern
#1
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
Top
#2
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)
Top
#3
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:
  • schauan
Top
#4
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
Top
#5
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)
Top
#6
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. Blush
Gruß Atilla
Top
#7
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)
Top
#8
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
Top
#9
(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
Top
#10
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)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste