Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
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
In 3 Spalten suchen anstatt in einer
20.03.2021 16:29:15
oraculix
Hallo
Ich habe endlich ein Makro gefunden das die suche so macht wie ich es möchte.
Doch leider wird nur in spalte A Gesucht. Benötigt wird aber Spalte A,B,H bis zeile 5000
Frage: Was muss ich ändern im Makro damit in 3 Spalten gesucht wird?
Dim LoLetzte As Long ' Variable für Letzte Zeile
Private Sub Txt_Ort_Change()
Dim LoI As Long                                 ' Schleifenvariable
Dim LoZeile As Long                             ' Variable für Zeile in Listbox
Dim RaFound As Range                            ' Variable für das Suchergebnis
Application.ScreenUpdating = False              ' Bildschirmaktualisierung aus
If Txt_Ort = "" Then                            ' keine Eingabe in der Textbox
' gesamte Liste zuweisen
Lst_Postleitzahlen.RowSource = "A2:B" & LoLetzte
Else
Lst_Postleitzahlen.RowSource = ""           ' Adressbreich für Listbox löschen
With Worksheets("FilmDb")
' erste Zeile Suchen
' letzte belegte Zeile unabhängig von Excelversion für Spalte A (1)
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Set RaFound = .Range("A2:A" & LoLetzte).Find(Txt_Ort _
& "*", .Cells(LoLetzte, 1), , xlWhole, , xlNext)
If Not RaFound Is Nothing Then          ' Begriff wurde gefunden
' Schleife von gefundener Stelle bis zu letzten Zeile
For LoI = RaFound.Row To LoLetzte
' Prüfen ob Ort noch mit dem Inhalt aus
' der Textbox beginnt
If UCase(Left(.Cells(LoI, 1), Len(Txt_Ort))) _
= UCase(Txt_Ort) Then
' Ort eintragen
Lst_Postleitzahlen.AddItem .Cells(LoI, 1)
' Postleitzahl eintragen
Lst_Postleitzahlen.List(LoZeile, 1) = .Cells(LoI, 2)
LoZeile = LoZeile + 1       ' Zeilennummer um 1 erhöhen
' auskommentiert wegen Umlaute
'Else
'Exit For                   ' Schleife verlasen
Else
If UCase(Left(.Cells(LoI, 1), 1)) _
 UCase(Left(Txt_Ort, 1)) Then
Exit For
End If
End If
Next
End If
End With
End If
Set RaFound = Nothing                           ' Variable leeren
Application.ScreenUpdating = True               ' Bildschirmaktualiserung ein
End Sub

Private Sub UserForm_Initialize()
With Worksheets("FilmDb")
' letzte belegte Zeile unabhängig von Excelversion für Spalte A (1)
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
' Adressbereich der Listbox zuweisen
Lst_Postleitzahlen.RowSource = "A2:b" & LoLetzte
Lst_Postleitzahlen.ColumnCount = 2          ' Spaltenanzahl der Listbox einstellen
End With
End Sub


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In 3 Spalten suchen anstatt in einer
20.03.2021 17:40:03
Daniel
Hi
Einfach in der Range vor dem .Find diesen Zellbereich angeben.
Weitere Bereiche, die nicht mit dem ersten zusammenhängen, konnte man mit komma anfügen:
...Range("A2:B5000,H2:H5000").Find(...
Wie du anstelle der festen 5000 die Variable da reinbrigst, siehst du in deinem Code.
Gruß Daniel

AW: In 3 Spalten suchen anstatt in einer
20.03.2021 17:50:03
oraculix
Hallo Danke erstmal für deine Antwort aber ich bekomme dann einen Fehler
Set RaFound = .Range("A2:B5000,H2:H5000" & LoLetzte).Find(Txt_Ort _
& "*", .Cells(LoLetzte, 1), , xlWhole, , xlNext)
Dieser Bereich wird gelb angezeigt.Hab ich da was falsch eingegeben?

Anzeige
AW: In 3 Spalten suchen anstatt in einer
20.03.2021 18:01:21
ralf_b
.Range("A2:B" & LoLetzte & ",H2:H" & LoLetzte).

AW: In 3 Spalten suchen anstatt in einer
20.03.2021 18:14:26
oraculix
Es kommt kein Fehler aber ich sehe dann in der listbox keine treffer mehr. sobald ich was eingebe bleibt die listbox leer.?

AW: In 3 Spalten suchen anstatt in einer
20.03.2021 18:48:44
oraculix
die datei zum suchen userform_buchstaben_listbox.zip http://Hajo-Excel.de habe ich hier downgeloadet
leider kann ich sie nicht senden weil sie zu groß ist

AW: In 3 Spalten suchen anstatt in einer
20.03.2021 21:00:15
Daniel
schwer zu sagen, weil du uns nicht sagst, was du manchen willst und wie deine Datei aussieht.
sollte das Makro nicht von dir sein, sprichst du am besten den an, der es dir geschrieben hat.
das hochladen einer Beispieldatei mit deinen Makros und ein paar daten zum nachstellen und ausprobieren wäre nicht schlecht.
ggf musst du etwas zeit investieren und deine Datei so abspecken, dass du sie hier hochladen kannst.
Gruß Daniel

Anzeige
AW: In 3 Spalten suchen anstatt in einer
20.03.2021 21:31:31
oraculix
Hallo Danke für Deine Mühe.
Habe die Mappe abgespeckt mit suche erstellt.
https://www.herber.de/bbs/user/144977.xlsm
Hoffe du siehst jetzt wie genial diese suche ist. einfach nur Film im Textfeld eingeben und er wird in der Listbox gezeigt.

AW: In 3 Spalten suchen anstatt in einer
20.03.2021 22:26:16
Daniel
naja klappt doch alles.
wo ist das Problem?
wenn du in drei Spalten suchen willst, dann musst du nicht nur das .FIND über drei Spalten suchen lassen, sondern auch in der nachfolgenden Suchschleife, denn dort machst du ja die eigentliche Suche.
Das .Find gibt nur den ersten Startwert vor, danach suchst du in einer normalen iF-Schleife weiter.
das .Find ist bei dem Makro prinzipell unnötig, es macht die Sache vielleicht etwas schneller.
die eigentliche Suche findet hier statt:
If UCase(Left(.Cells(LoI, 1), Len(Txt_Ort))) = UCase(Txt_Ort) Then

hier musst du, wenn du in drei Spalten suchen willst, nicht nur den wert aus der ersten Spalte mit dem Suchbegriff vergleichen, sondern auch die Werte aus allen anderen Spalten, in denen du suchen willst.
momentan hast du nur IF WertSpalteA = Textbox Then
du brauchst aber IF WertSpalteA = Textbox OR WertSpalteB = Textbox OR WertSpalteH = Textbox then
wenn du in den Spalten A, B und H suchen willst.
Bekommst du das allein umgesetzt?
man kann das aber auch etwas einfacher programmieren mit Hilfe von LIKE
if UCase(.Cells(LoI, 1) & .Cells(LoI, 2) & .Cells(LoI, 8)) like UCase("*" & Txt_Ort & "*") then
wobei sich die Frage stellst, warum du deine Listbox "Lst_Postleitzahlen" nennst, wenn du doch mit Filmtiteln arbeitest.
wenn man schon sprechende Namen verwendet, sollten die auch was mit dem Projekt zu tun haben, sonst verwirrt das nur.
Gruß Daniel

Anzeige
AW: In 3 Spalten suchen anstatt in einer
20.03.2021 23:16:26
oraculix
vielen dank ich glaube ich bin am richtigen weg aber leider kommt ein fehler.
habe ich es falsche zeile eingetragen?
als anfänger habe ich keine ahnung nur vermutungen
Private Sub Txt_Ort_Change()
Dim LoI As Long                                 ' Schleifenvariable
Dim LoZeile As Long                             ' Variable für Zeile in Listbox
Dim RaFound As Range                            ' Variable für das Suchergebnis
Application.ScreenUpdating = False              ' Bildschirmaktualisierung aus
If Txt_Ort = "" Then                            ' keine Eingabe in der Textbox
' gesamte Liste zuweisen
Lst_Postleitzahlen.RowSource = "A2:B" & LoLetzte
Else
Lst_Postleitzahlen.RowSource = ""           ' Adressbreich für Listbox löschen
With Worksheets("FilmDb")
' erste Zeile Suchen
' letzte belegte Zeile unabhängig von Excelversion für Spalte A (1)
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Set RaFound = .Range("A2:A" & LoLetzte).Find(Txt_Ort _
& "*", .Cells(LoLetzte, 1), , xlWhole, , xlNext)
If Not RaFound Is Nothing Then          ' Begriff wurde gefunden
' Schleife von gefundener Stelle bis zu letzten Zeile
For LoI = RaFound.Row To LoLetzte
' Prüfen ob Ort noch mit dem Inhalt aus
' der Textbox beginnt
If UCase(.Cells(LoI, 1) & .Cells(LoI, 2) & .Cells(LoI, 8)) Like UCase("*" & Txt_Ort & "*")  _
Then
If UCase(Left(.Cells(LoI, 1), Len(Txt_Ort))) _
= UCase(Txt_Ort) Then
' Ort eintragen
Lst_Postleitzahlen.AddItem .Cells(LoI, 1)
' Postleitzahl eintragen
Lst_Postleitzahlen.List(LoZeile, 1) = .Cells(LoI, 2)
LoZeile = LoZeile + 1       ' Zeilennummer um 1 erhöhen
' auskommentiert wegen Umlaute
'Else
'Exit For                   ' Schleife verlasen
Else
If UCase(Left(.Cells(LoI, 1), 1)) _
 UCase(Left(Txt_Ort, 1)) Then
Exit For
End If
End If
Next
End If
End With
End If
Set RaFound = Nothing                           ' Variable leeren
Application.ScreenUpdating = True               ' Bildschirmaktualiserung ein
End Sub


Anzeige
AW: In 3 Spalten suchen anstatt in einer
21.03.2021 03:31:17
Daniel
Naja, du musst das anstelle des bisherigen IFS einsetzten und nicht zusätzlich.
Do kennst doch deinen Code und solltest wissen, wie er funktioniert.
Gruß Daniel

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige