Schnelle Suchfunktion in VBA

20/12/2007 - 09:08 von m.hanke | Report spam
Moin Excel-Experten,
ich suche eine Möglichkeit, mit der ich schneller als mit dem
folgenden Code:

'Suchen der Dateinamen
With tb2.Columns(n2)
Set doppelterwert = .Find(dateizeile, LookIn:=xlValues)
If Not doppelterwert Is Nothing Then
tb1.Cells(i, 10).Value = tb2.Cells(doppelterwert.Row,
n1).Value
End If
End With

in einer anderen Tabelle einen Wert finde.
Dabei ist:
TB2 ein Worksheet in der aktiven Tabelle
TB1 das aktive Worksheet
n1, n2 Indizes der Spalten auf TB2 (n1 Suchspalte, n2 Rückgabespalte)
und i die aktuelle Zeile auf TB1

Der Code sucht in einer Tabellenspalte (anderes Blatt, gleiche
Workbook) nach einem Wert in einer bestimmten Spalte, und gibt dann
aus einer anderen Spalte aber der gleichen Zeile des gefundenen
Wertes, den Inhalt zurück. Es funktioniert zwar aber er ist mir viel
zu langsam, allerdings ist auch einiges an DAten zu durchsuchen:
Spalte n1 hat, ca. 18000 Zeilen und die Funktion wird aus TB1 ca.
4000x aufgerufen (imax@00 Zeilen zum ausfüllen). In den Zellen
stehen Zeichenfolgen mit ca.

Ist hier vielleicht Application.Workbookfunction.find schneller?
Oder kann man noch irgendwie anders schnell suchen (zur Not vielleicht
auch mit vorsortieren - allerdings ungern)?
 

Lesen sie die antworten

#1 Thomas Ramel
20/12/2007 - 09:18 | Warnen spam
Grüezi m.hanke

schrieb am 20.12.2007

ich suche eine Möglichkeit, mit der ich schneller als mit dem
folgenden Code:

'Suchen der Dateinamen
With tb2.Columns(n2)
Set doppelterwert = .Find(dateizeile, LookIn:=xlValues)
If Not doppelterwert Is Nothing Then
tb1.Cells(i, 10).Value = tb2.Cells(doppelterwert.Row,
n1).Value
End If
End With

in einer anderen Tabelle einen Wert finde.

Der Code sucht in einer Tabellenspalte (anderes Blatt, gleiche
Workbook) nach einem Wert in einer bestimmten Spalte, und gibt dann
aus einer anderen Spalte aber der gleichen Zeile des gefundenen
Wertes, den Inhalt zurück. Es funktioniert zwar aber er ist mir viel
zu langsam, allerdings ist auch einiges an DAten zu durchsuchen:
Spalte n1 hat, ca. 18000 Zeilen und die Funktion wird aus TB1 ca.
4000x aufgerufen ( Zeilen zum ausfüllen). In den Zellen
stehen Zeichenfolgen mit ca.

Ist hier vielleicht Application.Workbookfunction.find schneller?



Vermutlich nicht; zumal Du keine Adresse des gefundenen Wertes zurück
bekommst.

Oder kann man noch irgendwie anders schnell suchen (zur Not vielleicht
auch mit vorsortieren - allerdings ungern)?



Was genau ist dir zu langsam - das Finden des Wertes wenn er vorhanden ist,
oder das weitergehen wenn er nicht gefunden wird?

Du könntest statt jedesmal eine Objekt-Variable zu setzen und diese dann zu
prüfen im Vorfeld sehen ob der Wert in der Spalte überhaupt vorhanden ist
und die Zuweisung nur dann vornehmen. Eine Objekt-Variable ist dann nicht
mehr notwendig, weil Du .Find() nur dann aufrufst wenn tatsàchlich ein
Rückgabewert geliefert werden kann:

With tb2.Columns(n2)
If Application.WorksheetFunction.CountIf _
(dateizeile, tb2.Columns(n2)) > 0 Then
tb1.Cells(i, 10).Value = _
tb2.Cells(.Find(dateizeile, LookIn:=xlValues).Row, n1).Value
End If
End With


Mit freundlichen Grüssen
Thomas Ramel

- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-2]
Microsoft Excel - Die ExpertenTipps

Ähnliche fragen