Anzeige
Archiv - Navigation
1628to1632
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

Ausstieg bei ODER

Ausstieg bei ODER
15.06.2018 11:23:44
Jockel
Hallo,
habe mal eine Frage zu einer ODER Funktion:
If Left(WS1.Cells(i, 9), 10) = Left(WS2.Cells(j, 12), 10) And _
Left(WS1.Cells(i, 10), 6) = Left(WS2.Cells(j, 13), 6) Or _
Left(WS1.Cells(i, 4), 5) = Left(WS2.Cells(j, 25), 5) Then ....
Wenn gleich im ersten Teile (vor dem Oder) ein Treffer gefunden wird, bricht das Makro die ODER Funktion ab, sprich, nach dem ODER wird gar nicht mehr geschaut und gibt das Ergebnis aus, oder wird auch der hinteren Teile trotzdem noch geprüft ?
Mich würde interessieren aufgrund welcher Bedingung ein Treffer zustande kam.
Hoffe, ihr versteht , was ich meine
Jockel

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
MsgBox
15.06.2018 11:36:16
lupo1
MsgBox Left(WS1.Cells(i, 9), 10) = Left(WS2.Cells(j, 12), 10) And _
Left(WS1.Cells(i, 10), 6) = Left(WS2.Cells(j, 13), 6)
MsgBox Left(WS1.Cells(i, 4), 5) = Left(WS2.Cells(j, 25), 5)
nacheinander prüfen.
Und gern Resümee hier mitteilen; dann sind wir auch schlauer ;)
AW: Ausstieg bei ODER
15.06.2018 12:44:53
fcs
Hallo Jockel,
Das Ergebnis ist hier True wenn die beiden Bedingungen vor dem Or beide True ergeben oder wenn die Bedingung nach dem Or True ergibt oder natürlich wenn alle 3 Bedingungen True liefern.
Damit die Prüfungen im Code eindeutiger nachzuvollziehen sind sollten zusätzlich Klammern gesetzt werden wenn And und Or im Ausdruck gemischt werden.
If (Left(WS1.Cells(i, 9), 10) = Left(WS2.Cells(j, 12), 10) And _
Left(WS1.Cells(i, 10), 6) = Left(WS2.Cells(j, 13), 6)) Or _
Left(WS1.Cells(i, 4), 5) = Left(WS2.Cells(j, 25), 5) Then ....
Gruß
Franz
Anzeige
AW: Ausstieg bei ODER
15.06.2018 14:38:52
Zwenn
Hallo Jockel,
soweit ich es recherchiert habe, unterstützt VBA keine short circuit evaluation für boolsche Ausdrücke. Auf Deutsch nennt sich das Kurzschlussauswertung:
http://de.wikipedia.org/wiki/Kurzschlussauswertung
Hier wurden schon Deiner ähnliche Fragen gestellt und auch erklärt, warum boolsche Ausdrücke in VBA immer ganz ausgewertet werden:
http://stackoverflow.com/questions/24641923/vba-short-circuit-and-alternatives (vor fast 4 Jahren)
http://stackoverflow.com/questions/3242560/andalso-orelse-in-vba (vor fast 8 Jahren)
Viele Grüße,
Zwenn
Anzeige
AW: Ausstieg bei ODER
15.06.2018 15:26:29
Daniel
Hi
Excel rechnet die Bedinungsprüfung vollständig durch, dh es werden alle angegebenen Bedingungen berechnet.
(deswegen ist es z.B. manchmal günstiger ein:
if A and B then durch ein gestaffeltes: If A then if B then ... zu ersetzen)
wenn du wissen willst, aufgrund welcher Bedingung der Treffer zustande kam, kannst du folgendes verwenden:
- ein TRUE wird in Berechnungen wie -1 verwendet
- Wenn du die Ergebnisse der einzelnen Bedingungsprüfungen aufaddierst und dabei mit einem vielfachen von 2 multipilzierst, kannst du genau auswerten, welche Bedingung TRUE war:
x = -1 * (A)
x = x -2 *(B)
in der Auswertung liest sich dass dann so:
x = 0: keine Bedingung ist WAHR
x = 1: Bedingung A ist WAHR
x = 2: Bedingung B ist WAHR
x = 3: Bedingung A und Bedingung B sind WAHR
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige