Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
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
Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 11:40:43
tco99
Hallo zusammen,
ich möchte eine Suchfunktion in meine Mappe bauen. Auf einer Userform befinden sich eine Textbox und eine Listbox. Man soll den Suchbegriff in die Textbox eingeben und alle Zeilen des Daten-Tabelleblattes, welche das Suchwort in einer ihrer Spalten haben, sollen auf ein neues Blatt kopiert werden. Dabei muss keine exakte Übereinstimmung vorliegen, eine ähnliche Übereinstimmung ist sogar wünschenswert.
Die Ergebnisse auf dem Ergebnis-Tabellenblatt möchte ich dann in die Listbox laden. Wie das funktioniert, weiß ich schon. Ich habe aber keine Ahnung, wie der Code aussehen muss, der alle Spalten eines Blattes nach einem Suchbegriff durchsucht und alle Funde als ganze Zeile in ein neues Blatt kopiert.
Was kein Probem wäre: dass der Code eine Zeile öfter kopiert, weil der Suchbegriff in mehr als einer Spalte vorkommt.
Wer kann mir helfen?
Ich habe dazu eine Beispielmappe gemacht:

Die Datei https://www.herber.de/bbs/user/85803.xls wurde aus Datenschutzgründen gelöscht


Gruß
Erdogan

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 11:46:00
Klaus
Hallo Erdogan,
vorab:
Dabei muss keine exakte Übereinstimmung vorliegen, eine ähnliche Übereinstimmung ist sogar wünschenswert.
Mit exakter Übereinstimmung wäre es sicherlich relativ einfach. Einen Text nach einer Ähnlichkeit zu beurteilen ist ein ganz eigenes Thema! Dazu gebe ich dir mal die Suchbegriffe "Soundex" und "Levensthein" an die Hand, mit der du in Google oder auch hier im Forum hunderte von Abhandlungen findest, bis hin zu langen Doktorarbeiten :-)
In Kurz: sind "Haus" und "Maus" sich ähnlicher als "Georg" und "Schorsch"? Die ersten beiden werden ähnlich geschrieben, die letzten beiden ähnlich ausgesprochen!
Den Rest schaue ich mir jetzt mal an.
Grüße,
Klaus M.vdT.

Anzeige
AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 11:59:18
Klaus
Hi,
hier mal ein Beispiel mit exakter Übereinstimmung und einer Hilfsspalte in der Datei:
https://www.herber.de/bbs/user/85804.xls
Grüße,
Klaus M.vdT.

AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 12:01:42
tco99
Hi Klaus,
ich habe mich nicht gut ausgedrückt, mein Fehler.
Mit Ähnlichkeit meine ich sowas wie Suchbegriff "Haus" und gefunden werden soll "Hausmeister". Dass ich mich schlecht ausgedrückt habe, wurde mir mit dem Beispiel "Haus" und "Maus" klar.
Gruß
Erdogan

gleichzeitig
13.06.2013 12:03:59
Klaus
Hi,
wir haben gleichzeitig gepostet! Mein Lösungsvorschlag ist ein Beitrag weiter oben.
"Haus" = "Hausmeister" habe ich bereits umgesetzt.
Mein Vorschlag füllt "nur" die Listbox, aber auf ein anderers Blatt kannst du es ja immer noch kopieren.
Grüße,
Klaus M.vdT.

Anzeige
AW: gleichzeitig
13.06.2013 12:09:43
tco99
Klaus,
ich glaube, das ist was ich suche :-)
Tatsächlich ist meine gewünschte "Ähnlich"-Funktion bereits drin. Was mir besonders gut gefällt ist, dass es wie eine Live-Suche ist. Du Anzeige der Ergebnisse beginnt bereits bei der Eingabe und auch doppelte Einträge sind nicht vorhanden. Ich denke, dass es nicht besser gehen kann.
Ich verstehe noch nicht, wie du es gelöst hast, aber wenn ich es mir gleich genauer anschaue, kann ich es wahrscheinlich auch für spätere Fälle adaptieren.
Was soll ich sagen, ich möchte mich sehr herzlich für deine sehr schnelle und professionelle Hilfe bedanken!
Viele Grüße
Erdogan

Anzeige
Danke für die Rückmeldung! mit Text
13.06.2013 12:14:58
Klaus
Hi Erdogan,
Ich verstehe noch nicht, wie du es gelöst hast, aber wenn ich es mir gleich genauer anschaue, kann ich es wahrscheinlich auch für spätere Fälle adaptieren.
in kurz: ich schreibe den Inhalt der Textbox1 in das Blatt, zähle dann mit der "Zählenwenn" Formel ob Suchbegriff &"*" vorkommt - immer wenn er vorkommt, wird die ganze Zeile in die Listbox geschrieben.
Wenn du noch Detailfragen hast, poste einfach nochmal hier!
Grüße,
Klaus M.vdT.

AW: Danke für die Rückmeldung! mit Text
13.06.2013 13:36:20
tco99
Ich hätte doch noch mal eine Frage:
wie bekomme ich es hin, dass ich auch die Überschriften angezeigt bekomme? Dass die Eigenschaft Columnheads auf True muss, denke ich mir, aber auch dann bleiben die Überschriften leer.
Und noch das hier: For i = 1 To 9
Wofür steht die 9 ?
Erdogan

Anzeige
AW: Danke für die Rückmeldung! mit Text
13.06.2013 14:14:14
Klaus
Hi Erdogan,
Wofür steht die 9 ?
die 9 steht für 10 vorhandene Spalten in der Listbox!
Seltsam, oder? Ist aber so :-)
Die Listbox hat folgende Spalten:
0-1-2-3-4-5-6-7-8-9
das ergibt 10 Spalten insgesamt.
In Spalte 0 steht die Automarke (Audi, BMW usw) durch "AddItem", dann werden die Spalten 1-9 per Schleife gefüllt.
wie bekomme ich es hin, dass ich auch die Überschriften angezeigt bekomme?
ganz einfach: Erstelle auch für die Überschriften ein ListBox-Item und die 9 Zeilen rechts davon.
Anbei mal der angepasste Code, welcher das macht. Bei der Gelegenheit habe ich den Code auch durchkommentiert und am Ende eine Zeile dazugepackt, welche die Hilfsformeln wieder löscht.
Private Sub TextBox1_Change()
Dim iRow As Long
Dim r As Range
Dim i As Integer
'alle Einträge aus der ListBox entfernen
ListBox1.Clear
With Sheets("Daten")
'letzte Zeile
iRow = .Cells(.Rows.Count, 1).End(xlUp).Row
'das Suchwort aus der TextBox in die Tabelle schreiben
.Range("K1").Value = TextBox1.Text
'per Formel die Häufigkeiten des Suchwortes* ermitteln
.Range(.Cells(2, 11), .Cells(iRow, 11)).FormulaR1C1 = "=COUNTIF(RC[-10]:RC[-1],R1C&""*"")"
For Each r In .Range(.Cells(1, 11), .Cells(iRow, 11))
'Wenn das Suchwort vorkommt ODER die erste Zeile (Überschriften) dran ist, dann:
If r.Value > 0 Or r.Row = 1 Then
'erstelle einen neuen ListBox-Eintrag
ListBox1.AddItem .Cells(r.Row, 1).Value
'und erstelle die 9 Spalten rechts davon in der Listbox
For i = 1 To 9
ListBox1.List(ListBox1.ListCount - 1, i) = .Cells(r.Row, i + 1).Value
Next i
End If
Next r
'lösche die Formeln wieder aus der Tabelle
.Range(.Cells(1, 11), .Cells(iRow, 11)).ClearContents
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Danke für die Rückmeldung! mit Text
13.06.2013 14:48:09
tco99
Hallo Klaus,
ich adaptiere es und gebe dann Feedback.
Dass die erste Spalte manchmal die Null und manchmal die Eins bekommt, daran erinnere ich mich sogar wage. Toll, dass du es auskommentiert hast. Sollte jemand anderes auf diesen Beitrag stoßen, hilft das ungemein. Herzlichen Dank, komfortabler gehts nicht mehr!
Viele Grüße
Erdogan

AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 15:05:33
tco99
Ich war wohl zu optimistisch.
Bei dem Versuch, die Lösung auf eine Tabelle zu erweitern, die über 27 Spalten verfügt, bekomme ich einen Fehler. Bei den Eigenschaften der ListBox spiele ich mit ColumnCount und im Chance-Ereignis der TextBox passe ich auch an:
'und erstelle die 9 Spalten rechts davon in der Listbox
For i = 1 To 27
Leider ohne Erfolg. Was übersehe ich denn?
Ich lade die Beispielmappe mit meinen Anpassungen hoch.

Die Datei https://www.herber.de/bbs/user/85811.xls wurde aus Datenschutzgründen gelöscht


Gruß
Erdogan

Anzeige
AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 15:11:37
Klaus
Hi,
im ersten Ansatz alles richtig gemacht - aber eine VBA-Listbox darf nur 10 Spalten haben!
Ich probier mal was, meld mich gleich wieder.
Grüße,
Klaus M.vdT.

AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 15:24:58
Klaus
Hi,
Workaround ... hab ich nur funktional gemacht. Schön machen musst du es selber :-) (Spaltenbreiten, BoxBreiten anpassen, verschieben, Rahmen aufheben usw ...)

Die Datei https://www.herber.de/bbs/user/85812.xls wurde aus Datenschutzgründen gelöscht


Grüße,
Klaus M.vdT.

AW: Suchfunktion, mehrere Spalten, Zeile kopieren
13.06.2013 15:40:21
tco99
Hi Klaus,
ich mag es, wenn es technisch aussieht :-) Von daher muss ich optisch nicht viel machen.
Im Grunde ist die Lösung, dass du die Abfrage dreimal ausführst und nebeneinander darstellt. Eine zweckmäßige Lösung, mit der ich super leben kann, vielen vielen Dank!
Und viele Grüße
Erdogan

Anzeige
hoffentlich verbessert: RowSource statt AddItem
13.06.2013 15:56:27
Klaus
Hi,
mich hat das gewurmt und ich habe gegoogelt ... eine Listbox darf durchaus über 10 Spalten haben, allerdings muss man diese dann über RowSource ansprechen.
Hier eine vielleicht bessere Variante:
https://www.herber.de/bbs/user/85813.xls
Es gibt wieder eine einzelne Listbox mit allen Einträgen, ich gehe den Umweg alle Einträge in das "Ergebnis" Blatt zu kopieren und mir von dort die RowSource zu holen. Diese Lösung kommt mir etwas langsamer vor und flackert - trotz Screenupdating = false - leider ein wenig, dafür kommt sie mit einer einzelnen ListBox aus.
Für einen möglichst schnellen Kopiervorgang nutze ich den Autofilter (das geht schneller, als Zeile für Zeile zu kopieren). Das dafür nötige "Standard-Makro" habe ich in ein Modul gepackt.
Grüße,
Klaus M.vdT.
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige