Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Geschwindigkeit von Abfragen

Forumthread: Geschwindigkeit von Abfragen

Geschwindigkeit von Abfragen
05.09.2022 08:06:22
Abfragen
Guten Morgen,
eine kurze Frage wie VBA If-Abfragen erledigt.
Wenn man eine Abfrage hat, z.B.

If bool = true And b = letzteZeile Then
Bricht es die Abfrage bereits ab, wenn der erste Teil falsch ist oder fragt es immer beides ab?
Heißt, kann man durch überlegte Antworten von UND-Abfragen die Rechenzeit verkürzen oder benötigt es zwei If-Abfragen dafür?
Also was ist schneller?

If bool = true And b = letzteZeile Then
End if
oder

If bool = true Then
If b = letzteZeile Then
End if
End if
Dankeschön und euch allen noch einen guten Start in die neue Woche!
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 08:10:34
Abfragen
Letzteres. Das "= True" in der ersten If-Bedingung ist übrigens überflüssig. Es geht ja darum, ob eine Bedingung False oder True ist. Bei einer Boolschen Variablen ist das ja bereits so.
AW: Geschwindigkeit von Abfragen
05.09.2022 08:31:59
Abfragen
Wie Peter schrieb, letzteres ist schneller.
Überlege dir mal, wenn VBA auch bei einer Prüfung vorzeitig abbrechen wollte, dann müsste es ja erst die vollständige Prüfung analysieren, an welcher Stelle und in welchen Fällen vorzeitig abgebrochen werden kann und das wäre wahrscheinlich immer aufwendiger, als die ganze Prüfung vollständig zu berechnen.
Bis du allerdings hier einen unterschied merkst, brauchst du schon viele solcher IFs, dh eine Schleife mit tausenden Umläufen.
Ein weiterer Vorteil der zweiten Variante ist, dass du bei einem Fehler in Dr Abfrage genauere Informationen bekommst, wo der Fehler steckt.
Gruß Daniel
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 08:35:58
Abfragen
Einen weitern Einfluss auf die Geschwindigkeit kannst du nehmen, wenn die Wahrscheinlichkeit, mit der ein Abfrage wahr wird, bekannt ist und du die Abfrage mit der geringsten Wahrscheinlichkeit zuerst abfragst.
Gruß Daniel
AW: Geschwindigkeit von Abfragen
05.09.2022 09:01:47
Abfragen
Guten Morgen,
@Peter
ich denke nicht dass die Abfrage über die boolVariable überflüssig ist, da nur in einem bestimmten Zustand die Abfrage erfolgen soll und ich diesen indirekt darüber Abfrage, statt alles zu Berechnen über 1000 Durchläufe, um am Ende dann festzustellen dass ich die Berechnung nicht gebraucht hätte.
Dankeschön Daniel!
Ja es sind schon deutlich über 1000 Durchläufe und nicht nur an einer Stelle.
Einerseits möchte man kompakt programmieren, andererseits ist die Geschwindigkeit wohl eleganter als einfach nur möglichst kompakten Code.
Danke euch für die Tipps.
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 09:12:08
Abfragen
Moin!
Ich gehe mal einfach davon aus, dass Du Peters Hinweis falsch verstanden hast.
Eine Variable vom Typ Boolean ist entweder True oder False.
In einer If-Abfrage wird ein Wahrheitswert abgefragt.
Statt

If Variable = True Then
reicht daher auch

If Variable Then
oder, wenn False geprüft werden soll

If Not Variable Then
Allerdings empfinde ich es als lesbarer, wenn der Wert in der Abfrage erscheint, also so wie bei Dir.
Gruß Ralf
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 09:38:57
Abfragen
Dankeschön Ralf!
In der Tat, so hatte ich es nicht verstanden.
Ich ziehe die Lesbarkeit aber auch vor.
Interessant es aber mal gesehen zu haben, vor allem wenn ich mal einen anderen Code sehe!
Grüße Martin
p.s. Entschuldigung für die Tippfehler bei meiner vorherigen Antwort.
Wahrscheinlich fast die größere Untat gewesen. Erschreckend wie schnell man die Rechtschreibung verlernt. Vielleicht bedingt dadurch, dass ich/man zum größten Teil nicht mehr mit der Hand zu schreibe, Autokorrektur macht außerdem denkfaul und in der Schweiz zu wohnen hilft auch nicht ;)
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 10:12:36
Abfragen
Hallo =)
eine Frage habe ich doch noch.
gibt es einen Unterschied in der Geschwindigkeit bei der Prüfung nach einer Zahl oder nach einen Boolean?
Also ist

If c = 2 Then
If bool = False then
End if
End if
oder

If bool = False Then
If c = 2then
End if
End if
schneller?
Wie gesagt, wegen Auswertung von CSV-Dateien gibt es sehr sehr viele Abfragen....
Ob ich den Programmieraufwand jemals wieder wettmache durch das Gesparte ist zwar fraglich, aber bei zukünftigen Programmen kann ich dann von Anfang an entsprechend optimiert programmieren :)
Dankeschön.
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 10:45:28
Abfragen
' wegen Auswertung von CSV-Dateien gibt es sehr sehr viele Abfragen '
Das bezweifle ich. Ein CSV kann man sehr einfach Filltern.
Evt könnte schneller sein:

If Bool * (c=2) then msgbox Bool

AW: Geschwindigkeit von Abfragen
05.09.2022 11:50:10
Abfragen
Hi,
und ich behaupte, dass es egal is, ob du
If c = 2 oder If bool = False fragst...
...weil beide Abfragen sind eine wahr/falsch Frage...
...daher = gleich schnell!
Und überhaupt...
Wieso fragst du bzgl deiner CSV-Aufgabe, die du erledigen musst/willst, nich gleich genau nach Lösungen zu genau dieser Aufgabe?
Wieso versuchst du es zuerst mit "von-hinten-durchs-auge-sticht-auch"?
Wie Daniel schon erwähnte, bei heute verwendeter (IT)Technik is es echt egal, welche IF-Bedingung man zuerst startet, um bloß die schnellste zuerst zu haben.
Oder.......hast du wirklich mehrere 100 IF's ineinander verschachtelt, was vllt zu einer Verlangsamung der Durchführ.geshcwindigkeit führen könnte?
Mein Tipp:
Erstell einen neuen Beitrag und komm gleich sofort mit dem raus, was du wirklich wissen willst.
Ciao
Thorsten
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 12:43:28
Abfragen
Das zeitkritischere Problem ist hier wahrscheinlich nicht der Vergleich an sich (da braucht man schon sehr viele, bis man messbare Unterschiede hat), sondern die Methode, mit der c bzw bool berechnet werden.
Sind das einfache Berechnungen, oder stecken zeitaufwendige Datenbankabfragen wie bspw ein SVerweis/VLookUp dahinter?
diese Zeiten dürften hier wesentlich dominanter sein als die Zeit des Vergleichs und sollten bei der Gestaltung der Abfrage eher berücksichtigt werden.
Gruß Daniel
Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 13:25:05
Abfragen
Hallo Thorsten,
Dankeschön für deine Antwort.
Doch ich habe ziemlich direkt meine Frage gestellt und entsprechend alle Fragen beantwortet bekommen.
Der Zusatz war vor allem meiner Neugierde geschuldet und da ich keine Ahnung habe, ob ein numerischer Abgleich den gleichen Aufwand wie die Abfrage eines boolwertes aufweist.
@Daniel
ja es werden relativ viele CSV-Dateien eingelesen und diese dann Zeile für Zeile mit den bisherigen Ergebnissen ausgewertet und Zwischenergebnisse gespeichert.
Das alles landet dann in einer externen Datenbank (xlsb).
Bei bis zu 10 CSV Dateien a 50 Zeilen mit mehreren Abfragen, kommt schon eine beachtliche Anzahl zusammen; bei der letzten Optimierung konnte ich allein durch eine geschickte Anordnung der Abfragen 3-4 (von 20) Sekunden Ausführungszeit einsparen.
Ein effizientes Programm zu schreiben ist für mich jedenfalls spannender und eher meine Zeit wert, als vor dem PC zu warten. (auch wenn es etwas zu perfektionistisch ist). Nebeneffekt ist wie gesagt, dass ich auch für zukünftige Programme lerne. Bin allerdings auch nur Laie und kein Profi, mit entsprechenden Ansprüchen an mich! ;)
Auf Thorstens Empfehlung hin, mache ich jetzt ein neues Topic auf, statt diesen Thread weiter mit einem anderen Thema aufzublähen, auch wenn sich dann vielleicht herausstellt, dass es gar nicht schneller/besser geht mit den externen Dateien. Aber dann ist es auch besser von google oder der Forumssuche findbar.
Dankeschön für eure Hilfe VBA besser zu verstehen zu lernen!
Grüße Martin
p.s. fall einer über den Thread stolpert und auch eine Möglichkeit benötigt die Rechenzeit zu messen:

 Zeit = Timer
Delta = Timer - Zeit
i = 100 * Delta
Delta = i / 100

Anzeige
AW: Geschwindigkeit von Abfragen
05.09.2022 13:51:44
Abfragen
Hi
20 Sekunden für grad mal 500 Zeilen hört sich nach viel an.
Vermutlich lässt sich da noch einiges optimieren.
Gruß Daniel
AW: Geschwindigkeit von Abfragen
05.09.2022 14:01:50
Abfragen
20 Sekunden inklusive mehrerer Netzwerkdateien öffnen und speichern ;)
Grüße
AW: Geschwindigkeit von Abfragen
05.09.2022 14:12:16
Abfragen
dann versuch mal rauszufinden, wieviel Zeit die Netzwerkoperationen benötigen (öffnen, speichern) und wieviel Zeit deine sonstigen Makroaktivitäten.
Wenns am Netzwerk liegt, kann man mit der Makroprogrammierung nicht viel machen. Wenn der größte Teil der Zeit von deinem Makro beansprucht wird, dann ist bei 500 Zeilen noch Luft nach oben.
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige