Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

schnelle Suche

schnelle Suche
08.12.2006 22:01:32
otto
Hi,
wie kann ich in einem Tabellenblatt mit ca. 100 Spalten und ca. 5000 Zeilen nach einem Begriff suchen, der mehrmals vorkommen kann (mit Schleife), und mir das Ergebnis in einer Listbox angezeigt wird.
Muss aber schnell gehen, mit meiner bisherigen Methode "With Worksheets...
Set c =.Find... dauert es ewig eh alle Zellen durchsucht wurden.
Wer kennt einen schnellen Code?
Gruß
otto

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: schnelle Suche
08.12.2006 22:08:43
Klaus-Dieter
Hallo Otto,
stell doch deinen Quelltext hier mal ein, eventuell kann man den optimieren.
Viele Grüße Klaus-Dieter

Online-Excel
AW: schnelle Suche
08.12.2006 22:30:05
otto
Hier der Code:
Dim begriff, zeile, fund
begriff = TextBox2
zeile = 0
With Sheets("Bestand").Range("a3:cd5000")
Do
Set c =.Find(begriff,LookIn:=xlvalues)
If firstAddress c.Address Then
fund = c.row
ListBox1.AddItem zeile
ListBox1.List(zeile, 0) =Cells(fund, 1)
ListBox1.List(zeile, 1) =Cells(fund, 3)
ListBox1.List(zeile, 2) =Cells(fund, 4)
ListBox1.List(zeile, 3) =Cells(fund, 25)
ListBox1.List(zeile, 4) =Cells(fund, 26)
Set c = .FindNext(c)
zeile = zeile + 1
Loop While firstAddressc.Address
End If
End With
otto
Anzeige
AW: schnelle Suche
08.12.2006 23:03:32
Herbert
Hi,
verwende statt AddItem ein Array und fülle die Box mit List, das dauert
bei der Datenmenge unter 1 Sekunde.
mfg Herbert
AW: schnelle Suche
08.12.2006 23:17:19
Klaus-Dieter
Hallo Otto,
was mich irritiert ist, das du in 82 Spalten nach einem Begriff suchen willst, letztlich aber nur die Inhalte von 5 Spalten ausgeben willst.
Im Übrigen schließe ich mich Herbert insofern an, dass es sicher schneller geht, mit einem Array zu arbeiten, als die Daten einzeln per AddItem einzulesen.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: schnelle Suche
08.12.2006 23:20:24
Erich
Hallo Otto,
wo in deinem Code bekommt firstAddress einen Wert? Abgefragt wird er zwei Mal.
Die Do-Loop-Schleife und der If/EndIf-Block sind etwas "schräg verzahnt".
Versuch mal als Zwischenlösung ohne Array:
Option Explicit
Sub xx()
Dim begriff As String, zeile As Long, c As Range, firstAddress As String, fund As Long
begriff = TextBox2
zeile = 0
With Sheets("Bestand").Range("a3:cd5000")
Set c = .Find(begriff, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
fund = c.Row
ListBox1.AddItem zeile
ListBox1.List(zeile, 0) = Cells(fund, 1)
ListBox1.List(zeile, 1) = Cells(fund, 3)
ListBox1.List(zeile, 2) = Cells(fund, 4)
ListBox1.List(zeile, 3) = Cells(fund, 25)
ListBox1.List(zeile, 4) = Cells(fund, 26)
zeile = zeile + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: schnelle Suche
08.12.2006 23:48:02
Klaus-Dieter
Hallo zusammen,
habe das mal getestet, Erichs Methode braucht 3 Sekunden, die Lösung mit Array unter einer Sekunde. Ich denke man kann mit beidem leben. Das Problem war wohl nur die unglückliche Schleifenschachtelung.
Viele Grüße Klaus-Dieter

Online-Excel
AW: schnelle Suche
11.12.2006 11:43:22
otto
Hallo Erich,
Danke für die Hilfe, aber wie schon gesagt, die Suche dauert ewig.
Ich weiß nicht warum.
Wenn ich nur in einer Spalte suche geht es schnell.
otto
AW: schnelle Suche
11.12.2006 13:40:53
Klaus-Dieter
Hallo Otto,
hast du den Quelltext von Erich getestet? Bei mir dauert die Suche damit, wie ich schon geschrieben hatte, 3 Sekunden. Mein Rechner ist mit knapp 700 Mhz auch nicht der schnellsten einer.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: schnelle Suche
11.12.2006 13:44:08
otto
Hi,
ja hab ich so eingefügt.
Wenn ich nach ca 5 sec. mal auf Escape drücke hat das Makro noch nicht mal mit Do.. angefangen.
otto
AW: schnelle Suche
11.12.2006 13:56:01
otto
Habe das gleiche Makro mal in einem anderen Tabellenblatt mit ähnlich vielen Einträgen suchen lassen, dort funktioniert es einwandfrei - Wieso das?
otto
AW: schnelle Suche
11.12.2006 16:57:24
Erich
Hallo Otto,
dass das in der anderen Mappe flott läuft, ist nur normal. Warum es in der ursprünglichen Mappe nicht vernünftig läuft,
muss an der Umgebung liegen. Die kennst bisher nur du.
Kannst du eine Kopie der Mappe (nach Löschen der Daten) mal hochladen (oder evtl. auch mir schicken)?
Meine Mail-Adresse steht in der Profilliste.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: schnelle Suche
11.12.2006 18:46:10
Klaus-Dieter
Hallo Otto,
würde mich auch interessieren. Mailadresse dito.
Viele Grüße Klaus-Dieter

Online-Excel
AW: schnelle Suche
12.12.2006 09:46:45
otto
Hi,
hier die hochgeladene Mappe, allerdings nur mit dem Tabellenblatt, wo die Suche ewig dauert. Wäre sonst zu groß geworden.
https://www.herber.de/bbs/user/38898.zip
Vielleicht könnt Ihr helfen.
Gruß
otto
AW: schnelle Suche
12.12.2006 15:46:04
Erich
Hallo Otto,
zunächst ein Tipp: Es ist meist ziemlich ratsam, bei Find() alle wesentlichen Parameter anzugeben.
(Da ich nicht genau weiß, wie wonach gesucht werden soll, hab ich das jetzt nicht getan.)
Vielleicht hilft das ja schon (ohne Test wg. fehlender Testdaten):
Private Sub Sucheallg_Click()
Dim Sallg As String, zeile, begriff As Long ', begriff1 As Long
Sallg = Start.TextBox2
zeile = 0
With Worksheets("Stamm").Range("c4:cd5000")
Set c = .Find(Sallg, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
begriff = c.Row
If begriff <> begriff1 Then
Fundeallg.ListBox1.AddItem zeile 'begriff
Fundeallg.ListBox1.List(zeile, 0) = Cells(begriff, 3)
Fundeallg.ListBox1.List(zeile, 1) = Cells(begriff, 5)
Fundeallg.ListBox1.List(zeile, 2) = Cells(begriff, 25)
Fundeallg.ListBox1.List(zeile, 3) = Cells(begriff, 23)
Fundeallg.ListBox1.List(zeile, 4) = Cells(begriff, 24)
zeile = zeile + 1
begriff1 = begriff
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Fundeallg.Show
End Sub
Private Sub Bestandsuche()
' weiterer Code
With bereich
Set c = .Find(suchbegriff, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
'c.Select
fund2 = c.Row
Funde.ListBox1.AddItem fund2
Funde.ListBox1.List(zeile2, 0) = Cells(fund2, 2)
Funde.ListBox1.List(zeile2, 1) = Cells(fund2, 3)
Funde.ListBox1.List(zeile2, 2) = Cells(fund2, 5)
Funde.ListBox1.List(zeile2, 3) = Cells(fund2, 25)
Funde.ListBox1.List(zeile2, 4) = Cells(fund2, 27)
Funde.ListBox1.List(zeile2, 5) = Cells(fund2, 61)
Funde.ListBox1.List(zeile2, 6) = Cells(fund2, 35)
Funde.ListBox1.List(zeile2, 7) = Format(Cells(fund2, 33), "0.0")
Funde.ListBox1.List(zeile2, 8) = Format(Cells(fund2, 39), "0.00")
Funde.ListBox1.List(zeile2, 9) = fund2
zeile2 = zeile2 + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Funde.Show
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: schnelle Suche
08.12.2006 22:11:03
Hubert
Hi,
schneller als mit "Find" geht nicht, da stimmt in deinem Code was nich.
mfg Hubert

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige