AW: und oder in einer If-Abfrage
08.08.2022 19:32:55
Daniel
Hi
das geht schon mit einer einzigen Bedingungsprüfung.
wenn man UND und ODER in einer Abfrage kombiniert, muss man beachten, das hier ähnlich wie bei PLUS und MAL die Regel gilt:
"UND vor ODER", dh es werden zuerst die beiden Bedingungen verknüpft, die mit UND verbunden sind dann mit diesem Ergebnis die mit ODER-verknüpften Bedingungen.
Will man das anders haben und zuerst die mit ODER verknüpften Bedingungen kombinieren, dann muss man Klammern setzen.
alternativ kann man auch jede UND-Verknüpfung durch ein geschachteltes IF darstellen, beides ist möglich.
wenn man auf die Rechenzeit schaut, dann ist es günstiger, anstelle einer UND-Verknüpfung zwei IFs ineinander zu schachteln.
macht man
If cells(1,1).value = 4 and (cells(1,2).value=4 or cells (1,2).value=0) Then
so wird jede der drei Vergleiche immer durchgeführt.
Schreibt man hingegen
If cells(1,1).value = 4 Then
If cells(1,2).value=4 or cells (1,2).value=0 Then
so wird nur das erste IF immer durchgeführt und das zweite nur dann, wenn das erste erfüllt ist, also weniger oft.
Allerdings macht sich das nur bemerkbar, wenn man das sehr oft macht (in Schleifen mit hohen umlaufzahlen) und wenn die Prüfung, die im zweiten IF durchgeführt werden muss, zeitaufwendig ist (vielleicht ein CountIF oder VLookUp)
Auch ist es in der geschachtelten Variante einfacher, bei einem Fehlerabbruch die Ursache zu ermitteln oder beim Testen im Einzelstepmodus einen Logikfehler zu finden.
insgesamt ist es also sinnvoller, UND-Verknüpfungen durch geschachtelte IFs darzustellen.
Eine einzige große Bedingungsabfrage hat nur dann Vorteile, wenn es einen ELSE-Teil gibt der ausprogrammiert werden muss.
bei geschachtelten IFs hast du auch mehrere ELSE-Teile, die jeweils programmiert werden müssen.
Wenn das aber immer das gleiche ist, müsstest du bei geschachtelten IFs diesen Codeteil mehrfach wiederholen, erstellst du nur eine einzige große Bedingungsprüfung, dann musst du das auch nur einmal hinschreiben.
Gruß Daniel