Überprüft die ODER-Funktion immer das zweite Argument, auch wenn das
erste bereits wahr ist?
Ich habe folgende Formel:
=IF(or(ISERROR(BF6/O6);BF6/O6=0);NA();BF6/O6)
Ergibt jetzt BF6/O6 einen Fehler, so wird das erste Argument
(ISERROR...) wahr, doch die zweite Bedingung wird trotzdem noch
überprüft. Da das Argument einen Fehler verursacht, entsteht z.B. ein
#VALUE-Fehler was dann auch das Ergebnis in der Zelle ist.
Warum macht Excel das??? Sobald ein Argument einer Oder-Bedingung wahr
ist, sollte auch das Ergebnis wahr sein. Bei Delphi wird schon
Rechenzeitgründen kein weiteres Argument überprüft, wenn das erste
wahr ist....
Vielleicht könnt ihr mir auch mit einer Umformulierung helfen.
Besten Dank schonmal für die Unterstützung
Marco
[snip]
Hallo Marco,
vielleicht hilft ja schon, die Fehlerverursacher zu identifizieren:
=IF(OR(O6=0;BF6=0);NA();BF6/O6)
Gruß
Klaus
> Hallo Marco,
> vielleicht hilft ja schon, die Fehlerverursacher zu identifizieren:
>
> =IF(OR(O6=0;BF6=0);NA();BF6/O6)
>
Leider nein. Die Felder werden selbst recht aufwendig berechnet. Habe
das Problem lösen können, indem ich die referenzierten Zellen des
Zählers nicht mehr 0 werden können. So muss ich nur noch auf Fehler
überprüfen, nicht mehr auf 0. Manchmal hilft es einfach mal eine
zweite Meinung zu bekommen.
Vielen Dank und gute Nacht
Marco
Ja, andere Sichtweisen helfen manchmal - ich vermute, die Fehlermeldung wird
schon über die vorherigen Formeln "durchgereicht", und dann ist Excel
erbarmungslos konsequent.
Gruß
Klaus
Hier ein anderer Lösungsansatz.
Eine "wenn-oder-" Abfrage behandelt immer das ganze ab. Um dies zu umgehen
gehts mit einer "verschachtelten" Abfrage.
==> wenn(Argument_1=Wahr;dann Ergebnins_1;sonst wenn(Argument_2=WAHR;dann
Ergebnis_2, sonst Ergebnis_3))
Auf Deine Formel bezogen müsste diese wie folgt aussehen:
=IF(ISERROR(BF6/O6)=TRUE;NA();IF(BF6/O6=0;NA();BF6/O6))
Was der Ausdruck "NA()" bedeutet weiss ich nicht. Muss dieser nicht ev. in
Anführungszeichen stehen?
Gruss Ruedi
--
Freundliche Grüsse
Werni
Danke, so wird es in der Tat gehen, trotzdem komisch, dass Excel noch
das zweite Argument überprüft.
> Was der Ausdruck "NA()" bedeutet weiß ich nicht. Muss dieser nicht ev. in
> Anführungszeichen stehen?
>
Das ist das gleiche wie in der deutschen Version das NV().
Danke für den Tipp und Gruß
Marco
> ich vermute, die Fehlermeldung wird
> schon über die vorherigen Formeln "durchgereicht", und dann ist Excel
> erbarmungslos konsequent.
Die Fehlermeldung entstand, wenn der Zähler ="" ist (#VALUE), oder
wenn der Nenner gleich 0 ist (#DIV/0). Aus dem Grund frage ich ja den
Fehler ab. Blöd war nur, dass der Zähler auch 0 sein konnte. Das habe
ich jetzt beseitigt, und mir somit den Test auf 0 als Gesamtergebnis
erspart.
Vielen Dank nochmal für die wochenendliche Hilfe
Marco
dieses Verhalten beruht IMHO auf der gewünschten Abwärtskompatibilität
von Excel.
Es ist aber ein Leichtes, eigene Funktionen einzusetzen, die nicht
notwendigerweise alle Argumente auswerten:
Function mor(ParamArray a() As Variant) As Boolean
'My own Or does not necessarily evaluate all args
Dim i As Long
For i = LBound(a) To UBound(a)
If a(i) Then
mor = True
Exit Function
End If
Next i
mor = False
End Function
Function mand(ParamArray a() As Variant) As Boolean
'My own And does not necessarily evaluate all args
Dim i As Long
For i = LBound(a) To UBound(a)
If Not a(i) Then
mand = False
Exit Function
End If
Next i
mand = True
End Function
Diese Funktionen können sowohl von VBA als auch von Tabellenfunktionen
aus aufgerufen werden.
Viele Grüße,
Bernd
Danke, werde ich mal übernehmen... ;o)
> Viele Grüße,
> Bernd
Und viele Grüße zurück
Marco