Anzeige
Archiv - Navigation
1064to1068
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

Fehlermeldung abfangen ohne Error-Routine?

Fehlermeldung abfangen ohne Error-Routine?
07.04.2009 09:07:33
MBorn
Guten Morgen,
ich nutze in VBA die Match-Funktion und wenn VBA kein Objekt findet, gibt es (natürlich)
eine Fehlermeldung. Ich mag On-Error-Routinen nicht, weiß aber auch nicht, wie man
sie in dem Fall umgehen könnte denn Folgendes funktioniert auch nicht:
If IsError(WorksheetFunction.Match("39204_25", Range("D1:D30000"), 0)) = False Then
MsgBox WorksheetFunction.Match("39204_25", Range("D1:D30000"), 0)
Else
MsgBox "Gibts nicht"
End If
Selection.find würde wahrscheinlich funktionieren, aber geht es nicht auch einfacher?
Mit weniger Code? Weiß jemand, was funktioniert? Einfach, klein und elegant?
Gruß und Dank,
Born

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung abfangen ohne Error-Routine?
07.04.2009 09:19:05
Tino
Hallo,
versuche es mal so.

If IsNumeric(Application.Match("39204_25", Range("D1:D30000"), 0)) Then
MsgBox Application.Match("39204_25", Range("D1:D30000"), 0)
Else
MsgBox "Gibts nicht"
End If


Gruß Tino

AW: Fehlermeldung abfangen ohne Error-Routine?
07.04.2009 09:41:14
MBorn
Hi Tino,
ja, das klappt.
Würde mich trotzdem interessieren, warum. Denn die Match-Funktion
gibt doch eindeutig eine Fehlermeldung aus, wenn sie kein Ergebnis findet?!
Danke, merci,
Born
AW: Fehlermeldung abfangen ohne Error-Routine?
07.04.2009 09:49:36
D.Saster
Hallo,
Worksheetfunction.Match erzeugt einen Fehler, falls nicht gefunden.
Application.Match hingegen gibt den Fehler aus und ist somit abfragbar.
Gruß
Dierk
Anzeige
AW: Fehlermeldung abfangen ohne Error-Routine?
07.04.2009 13:27:25
MBorn
Ach sooooo...
Merci,
Born
AW: CountIf oder VLookUp
08.04.2009 00:46:38
Daniel
Hi
alternativ könntest du auch die Worksheetfunction.CountIf-Funktion verwenden, um die Existenz eines Wertes festzustellen:

if Worksheetfunction.CountIf(Range("D1:D30000"),"39204_25")> 0 then
MsgBox WorksheetFunction.Match("39204_25", Range("D1:D30000"), 0)
Else
MsgBox "Gibts nicht"
End If


bei deinen Datenmengen würde ich aber die VLookUP-Methode bevorzugen:


if Worksheetfunction.VLookUp("39204_25", Range("D1:D30000"), 1, 1) = "39204_25" then
MsgBox WorksheetFunction.Match("39204_25", Range("D1:D30000"), 1)
Else
MsgBox "Gibts nicht"
End If


durch das Setzen des Letzten Paramerters (Bereichverweis) = 1 (True) in MATCH und VLOOKUP bist du deutlich schneller als mit 0 (False).
allerdings setzt diese Methode sortierte Daten voraus, aber der Aufwand lohnt sich, weil der Geschwindigkeitsgewinn enorm ist. Auch CountIF ist ne lahme Ente.
Gruß, Daniel

Anzeige
AW: CountIf oder VLookUp
08.04.2009 08:09:33
Tino
Hallo,
ich finde aber das sortieren und wieder zurücksortieren hebt den Zeitgewinn wieder auf,
wenn es dann nicht sogar noch länger dauert.
Gruß Tino
AW: dafür ist es 1000x schneller!
08.04.2009 23:43:55
Daniel
Hi
sortieren geht eigentllich auch bei grossen Datenmengen recht schnell und das zurücksortieren sollte man sich bei dieser Datenmenge sowieso sparen können ;-)
andererseits ist es halt so, daß ZählenWenn oder SVerweis mit Bereichverweis = Falsch bei einer Liste mit 30.000 Zeilen zwischen 0 und 30.000 Vergleichsoperationen benötigen um ans Ziel zu kommen, dh im Statistischen mittel 15.000 Vergleiche pro SVerweisfunktion.
ist die Liste hingegen sortiert und man verwendet den SVerweis mit Bereichverweis = Wahr, so kommt die Funktion mit 15 ! Vergleichen ans Ziel (bei 30.000 Datensätzen), das macht einen Unterschied von Faktor 1000 pro SVerweis-Funktion.
klar, für den einzelnen SVerweis ist das noch nicht spürbar, aber normalerweise wird so eine SVerweis-Funktion in einer Schleife verwendet oder steht als Formel in einer grösseren Tabelle.
da ist die Zeit fürs Sorieren schnell wieder aufgeholt
Anzeige
1000* schneller aber durcheinander. oT.
09.04.2009 07:16:26
Tino
Hallo,
muss man für sich selbst entscheiden welchen weg man geht.
Gruß Tino
zum Spaß...
09.04.2009 07:46:18
Tino
Hallo,
naja und 1000mal ist etwas übertrieben ;-)
Zum Spaß habe ich es mal getestet.
Bei 20000 Daten, macht es bei mir einen unterschied um den Faktor aufgerundet 8.
Also mit False ist es 8mal langsamer als mit True und ich habe eine lahme Möhre. ;-)
Gruß Tino
AW: nicht übertrieben
09.04.2009 11:51:21
Daniel
Hi Tino
ich weiß ja nicht, wie du auf 8 kommst, aber egal, Faktor 8 in der Bearbeitsungzeit ist durchaus eine Relevante Grösse, die je nach Grössenbereich einigen Aufwand rechtfertigt (1/1000 sec oder 8/1000 sec ist egal, aber 1 sec oder 8 sec ist schon spürbar)
außerdem, der Faktor 1000 bezog sich ja auf die Anzahl der Vergleichsoperationen, die die Vergleichsfunktion durchführen muss. Dass das nicht 1:1 in Bearbeitungsgeschwindigkeit umsetztbar ist, sollte klar sein, weil die Funktion ja auch noch ein paar andere Operationen durchführen muss, die für beide Varianten gleich sind.
das meine Einschätzung nicht so falsch ist, zeigt vielleicht dieses Beispiel (Speedtest für die Reine Funktion, dh. Excelformeln). ich komme damit bei 32000 Zeilen auf einen Geschwindigkeitsunterschied von Faktor c.a 500, bei 20.0000 Zeilen sind es noch 300
ich denke das reicht, um sich Gedanken über die Sortierung der Daten zu machen und bei Bedarf u.U. mal Umzusortieren. Ich weiß ja nicht, wie lange das Sortieren bei dir dauert, aber bei mir sind das max 1/10 Sekunden, auch bei diesen Datenmengen.
https://www.herber.de/bbs/user/61106.xls
Gruß, Daniel
Anzeige
AW: nicht übertrieben
09.04.2009 12:23:32
Tino
Hallo,
hast ja recht, habe ich auch nie angezweifelt.
Meine Meinung ist nur, dass man überlegen sollte welche Variante man nutzen will und nicht einfach was macht nur weil man es irgendwo mal so gehört hat. (nutzen aufwand)
zBsp. an dem Rechner wo ich jetzt bin, geht dass Sortieren in Windeseile.
An meinem anderen Rechner (ist etwas älter), kann ich in der Zwischenzeit eine rauchen gehen.
Seltsamerweise laufen aber die Funktionen nicht viel langsamer, wie an dem anderen.
Egal, lassen wir es dabei, ich denke wir beide wissen schon wann wir was anwenden.
Gruß Tino
Anzeige
Ausprobiert - Super! Danke
10.04.2009 17:57:25
MBorn
Hallo Daniel,
weiß nicht ob du das noch liest. Ich habe Deine enigestellte Tabelle ausprobiert und war
mehr als erstaunt. Der Zeitvorteil ist enorm. Das lohnt sich auf jeden Fall. Inclusive Sortieren.
Danke für den Tipp,
Born
AW: CountIf oder VLookUp
08.04.2009 10:57:16
MBorn
Hallo Daniel,
das werde ich auf jeden Fall ausprobieren. Wenn ich auch erstmal mit der application.match von Tino gut
zurechtkomme. Den Bereichsverweis-Parameter probiere ich auf jeden Fall aus. Darauf bin ich gespannt.
Danke auf jeden Fall für den Tipp,
Born

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige