Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1068to1072
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
Inhaltsverzeichnis

Schnellere Suche

Schnellere Suche
11.04.2009 11:37:37
Hans
Hallo Freunde, ich habe ein Tabelle mit 13000 Zeilen da möchte ich in SpalteA nach einer Zahl suchen,
nach Fund wird einfach die Zelle markiert. Als "zahl" ist der Suchbegriff deklariert.
Dies kann ich auf folgenden zwei Arten machen :
A)
Range("A:A").Select
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = zahl Then
Cells(i, 1).Select
GoTo weiter
End If
Next
B)
Range("A:A").Select
Selection.Find(What:=zahl, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell.Select
Das Problem ist, das der Fall A sehr lange dauert und dass bei Fall B ein Abbruch kommt falls die zahl nicht existiert.
Kann mir jemand helfen dass ich es ohne Abbruch schnell hinbekomme :D
Viele Grüße
Hans

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schnellere Suche
11.04.2009 11:46:46
Holger
Hallo Hans,
füge vor und nach der Zeile mit Selection folgendes ein:
On Error Resume next
Selection.Find(What:=zahl, After....
On Error Goto 0
Gruß
Holger
AW: Schnellere Suche
11.04.2009 12:02:49
Klaus-Dieter
Hallo Hans,
der Find-Methode ist in jedem Fall der Vorzug zu geben. On Error Resume Next sollte vermieden werden. Das Beispielmakro verursacht keinen Fehler, wenn die Zahl nicht vorkommt.
Modul Modul1
Option Explicit 
 
Sub suche() 
 Dim zahl As Long 
 Dim c As Range 
 zahl = 1234 
 With Sheets("Tabelle1").Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) 
 Set c = .Find(zahl, LookIn:=xlValues) 
 If Not c Is Nothing Then 
 c.Select 
 End If 
 End With 
End Sub 


[size=8]Code eingefügt mit [url=http://vbahtml.origo.ethz.ch] VBA in HTML 2.0.0.1[/url][/size]

Anzeige
AW: Sucher besser nicht mit Find
11.04.2009 12:19:24
Erich
Hi Klaus-Dieter,
"der Find-Methode ist in jedem Fall der Vorzug zu geben"? Nein, da möchte ich dir widersprechen!
Der Find-Erfolg ist abhängig von dem Format, in dem der Suchwert in der Tabelle vorkommt.
1234 wird gefunden, wenn die Zelle normal als Zahl ohne Tausender-Trennzeichen formatiert ist.
Mit Formaten wir z. B. "#.##0" oder "00 00" wird die Zahl 1234 schon nicht mehr gefunden.
IMHO sollte ein Code aber unabhängig sein davon, wie ein Benutzer gerade seine Daten formatiert hat.
Da ist die Application.Match-Methode, die Tino gepostet hat, die bessere Alternative
(zumindest für die Suche in einer Spalte).
Noch eine Bemerkung:
Ich finde es wichtig, bei Find() ALLE wesentlichen Parameter zu belegen, sonst wird das Ergebnis zufallsabhängig.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sucher besser nicht mit Find
11.04.2009 12:51:33
Klaus-Dieter
Hallo Erich,
meine Bemerkung bezog sich auf die beiden von Hans eingestellten Varianten. xlLookat steht meiner Meinung nach als Default auf Whole. Ist das nicht so?
Viele Grüße Klaus-Dieter

Online-Excel
AW: Sucher besser nicht mit Find
11.04.2009 13:01:39
Tino
Hallo,
wenn Du zuvor von Hand eine Suche machst und die Parameter verstellst, werden diese wieder verwendet.
Ich hatte dies auch mal in einem Programm und konnte mir nicht erklären warum es einmal funktioniert und einmal nicht.
Seither gebe ich bei der Find- Funktion grundsätzlich alle Parameter an, egal ob es nötig ist oder nicht.
Gruß Tino
Anzeige
AW: Sucher besser nicht mit Find
11.04.2009 13:11:03
Erich
Hi Klaus-Dieter,
xlWhole ist NICHT Default-Wert für xlLookat. Zitat aus der Hilfe zu Find():

Hinweise
Die Angaben für LookIn, LookAt, SearchOrder und MatchByte werden jedesmal gespeichert,
wenn Sie diese Methode verwenden. Falls Sie beim nächsten Aufruf dieser Methode
keine Werte für die Argumente angeben, werden die gespeicherten Werte verwendet.
Die Angabe dieser Argumente ändert die Einstellungen im Dialogfeld Suchen,
und eine Änderung der Einstellungen im Dialogfeld Suchen ändert die gespeicherten Werte,
die verwendet werden, wenn Sie die Argumente nicht angeben.
Um Probleme zu vermeiden, sollten Sie bei jeder Verwendung dieser Methode
diese Argumente ausdrücklich angeben.

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Sucher besser nicht mit Find
11.04.2009 13:39:55
Klaus-Dieter
Hallo Erich,
OK, OK, du hast Recht, aber nur weil Ostern ist. ;-)) Im Allgemeinen setzte ich den Parameter auch, dieses Beispiel hatte ich schnell aus der Excel"hilfe" kopiert. Da ist er erstaunlicherweise nicht drin, wird an dieser Stelle auch nicht erwähnt.
Viele Grüße Klaus-Dieter

Online-Excel
Frage an Erich oderTino
13.04.2009 10:44:00
Krümelmonster
Hey Erich,
schön daß mal einer diesem Klugscheißer Klaus-Dieter seine Grenzen aufzeigt. jetz habe ich versucht, die Application.Match-Methode für die Suche nach Datum zu verwenden. Geht irgendwie nicht. Könnt ihr helfen?
Es grüßt Krümelmonster
Anzeige
AW: Frage an Erich oderTino
13.04.2009 11:12:09
Tino
Hallo,
hier ein einfaches Beispiel dazu, es wird in der Spalte 1 nach dem Datum gesucht.
Sub Beispiel()
Dim LDatum As Long, varRow

'Beispiel Datum als Ganzzahl (Long) 
LDatum = CDate("01.01.2009")

'varRow als Variant, wegen der Rückgabe 
varRow = Application.Match(LDatum, Columns(1), 0)

'Datum wurde gefunden, varRow ist eine Zahl 
If IsNumeric(varRow) Then
 Cells(varRow, 1).Select
End If

End Sub


Gruß Tino

Anzeige
noch was...
13.04.2009 11:41:28
Tino
Hallo,
Du solltest Deinen Umgangston etwas überdenken.
Gruß Tino
AW: (k)eine Antwort von Erich
13.04.2009 11:14:25
Erich
Hi Krümelmonster,
so solltest du dich hier nicht über einen Antworter äußern, wenn du eine Antwort auf deine Frage erwartest.
Meine Antwort auf deine Frage "Könnt ihr helfen?": Yes, I can - aber ich will nicht.
Trotzdem noch einen schönen Rest-Ostermontag!
Rückmeldung ist nicht nötig - Grüße von Erich aus Kamp-Lintfort
AW: Schnellere Suche
11.04.2009 11:54:28
Tino
Hallo,
geht es so?
Sub Beispiel()
Dim varRow
Dim Bereich As Range
Dim Zahl As Double

Zahl = 1000.5 'Deine Suchzahl Beispiel 

Set Bereich = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp), Cells(Rows.Count, 1))
Set Bereich = Range("A1", Bereich)

varRow = Application.Match(Zahl, Bereich, 0)

If IsNumeric(varRow) Then
 Cells(varRow, 1).Select
End If

End Sub


Gruß Tino

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige