Suchen über mehrere Spalten
#1
Hallo,
ich habe eine Tabelle mit einem großen Buchbestand. In dieser Tabelle kann ich auch erfolgreich nach einem Buchtitel suchen. Jetzt möchte ich aber den Suchbereich von Spalte 2 auf alle Spalten ausdehnen. Wie muss ich die Prozedur EintragSuchen (im Modul1) verändern? Sicher ist es für erfahrene Excel-Anwender kein Problem, aber ich scheitere mit meinen rudimentären Kenntnissen an dieser Aufgabe.
.xlsm   Beispiel1.xlsm (Größe: 96,75 KB / Downloads: 6)
Antworten Top
#2
Hallo,

du möchtest also nicht nur nach dem Buchtitel suchen? Die Suchefunktion, die du da verwendest ist sicher nicht optimal, das würde ich mit der Find-Methode machen, da lässt sich das einfacher lösen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallo,

habe das mal in dein Makro eingebaut:

Code:
Public Sub EintragSuchen(form As UserForm)
    '---------------------
    'Nach Einträgen suchen
    '---------------------
    'Das zugehörige Tabellenblatt aktivieren
    ThisWorkbook.Worksheets("Bücher").Activate
    'ComboBoxTreffer zu Beginn leeren
    form.ComboBoxTreffer.Clear
    'Variablen definieren
    Dim i As Integer                                                        'Startzeile
    Dim zelleneintrag As String                                             'Wert, der in der Tabelle steht
    Dim eingabe As String                                                   'Suchbegriff, der in der TextBoxSuchen eingetragen wird
    Dim c As Range
    Dim firstAddress As String
    'Werte zuweisen
    i = 4                                                                   'erste Zeile mit Einträgen in der Tabelle
    zelleneintrag = StrConv(Cells(i, 2).Value, vbUpperCase)                 'dert Eintrag in der Tabelle, mit StrConv und vbUpperCase in Großbuchstaben umgewandelt
    eingabe = StrConv(form.TextBoxSuchen, vbUpperCase)                      'der mit StrConv und vbUppercase umgewandelte Suchbegriff
    'Zeichenketten vergleichen
   
    With Tabelle1.Range("A4:M25")                                           ' Suchbreich definieren
        Set c = .Find(eingabe, LookIn:=xlValues)                            ' Suchbegriff zuweisen
        If Not c Is Nothing Then                                            ' wenn Treffer, dann ...
            firstAddress = c.Address                                        ' Adresse des Treffers in Variable übernehmen
            Do
                form.ComboBoxTreffer.AddItem Cells(c.Row, c.Column).Value   ' Treffer in Combibox schreiben
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    'ersten Treffer aller Suchergebniss in der ComboBoxTreffer anzeigen
    If form.ComboBoxTreffer.ListCount <> 0 Then
        form.ComboBoxTreffer.ListIndex = 0
    End If
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#4
Hallo Klaus-Dieter,
vielen Dank für den Tip und vor allen Dingen für die Implementierung. Das läuft hervorragend. Jetzt muss ich nur noch die Übernahme in die zugehörige UserForm bearbeiten.
Sollte ich daran scheitern, was ich nicht hoffe, dann melde ich mich wieder.

Viele Grüße
Klaus
Antworten Top
#5
Hallo Klaus,

habe die Übernahme mal mit eingebaut.


Angehängte Dateien
.xlsm   Beispiel2.xlsm (Größe: 91,33 KB / Downloads: 2)
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#6
Hallo Klaus-Dieter,
vielen Dank für deine elegante Lösung meines Problems.
Ich habe zwischenzeitlich auch eine Lösung gefunden, die einem Profi bestimmt die Haare zu Berge stehen lässt.
Einfach geändert in der Zeile
                form.ComboBoxTreffer.AddItem Cells(c.Row, 2).Value  ' Treffer in Combobox schreiben
Das c.column durch die 2 ersetzt, widerspricht wahrscheinlich allen Regeln, funktioniert aber.

Nochmals vielen Dank und viele Grüße
Klaus
Antworten Top
#7
Hallo Klaus,

Zitat:Das c.column durch die 2 ersetzt, widerspricht wahrscheinlich allen Regeln, funktioniert aber.


deine Anfrage hatte ich dahingehend verstanden, dass du die Suche auf weitere Spalten ausdehnen wolltest. Deshalb hatte ich c.Column eingebaut. So wie es jetzt ist, werden nur die Treffer in Spalte 2 (B) eingetragen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
Hallo,

gerade erst ist mir aufgefallen, dass sich deine Antwort auf meinen ersten Lösungsvorschlag bezieht. Sie dir mal die Datei an, da habe ich das anders gelöst.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#9
Hallo Klaus-Dieter,
ich muss das wohl besser erklären. In der ursprünglichen Form der Sub wurde nur in der Spalte "Titel" der Tabelle gesucht und alle Treffer im TextFeldTreffer ausgegeben. Gleichzeitig wurden alle Inhalte der Spalten in den entsprechenden Feldern der UF angezeigt. Häufig wird aber auch nach einem Autor oder einer anderen Information gesucht, deshalb wollte ich ja die Ausweitung des Suchbereiches.
Mit deiner 1.Variante wurde im TextFeldTreffer der Inhalt der Zelle angezeigt wo der Treffer lag, in der UF wurde sonst nichts angezeigt. Mit der Änderung von c.column auf 2 wurde dort aber wieder der Titel des Buches angezeigt und alle anderen Werte in  den  Feldern der UF.
Das habe ich wirklich nur nach "try and error" gemacht und es hat ja auch geklappt.
Deine Lösungen sind eben die eines Profis und nicht die eines "Sonntagsfahrers" auf diesem Gebiet.
Nochmals vielen Dank für deine Hilfe.

Viele Grüße
Klaus

Es läuft mit der letzten Variante von dir alles wunderbar. Der buchbestand liegt so etwa bei 2000 Büchern. Deshalb habe ich das überhaupt nur gemacht.
Antworten Top
#10
Hallo Klaus,

das hatte ich schon so verstanden. Mein erster Vorschlag war nur ein Schnellschuss, den ich dann im Anschluss optimiert habe. Die Auswertung für die Datenübernahme musste komplett neu angelegt werden, (wie du sicher im Quelltext gesehen hast).


Übrigens: ein Profi bin ich nicht, sonst hättest du von mir eine Rechnung bekommen.  05
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top


Gehe zu:


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