Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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

Division durch null vermeiden?

Division durch null vermeiden?
Holger,
Hallo,
eine Division durch null ist ja nicht erlaubt.
Daher prüfe ich vorher, ob der Wert, der null sein könnte, größer null ist.
Kann man das nicht einfacher lösen?
        If lngTotalAge > 0 Then
Cells(9 + lngZ, 4) = lngTotalAge / lngTotalUn
End If

AW: Division durch null vermeiden?
16.02.2011 16:26:32
Erich
Hi Holger,
warum prüfst du lngTotalAge, wenn du danach durch lngTotalUn dividierst?
Warum prüfst du auf ">0" - "<>0" würde auch reichen. Es gibt auch negative Zahlen,
und dadruch kann/darf man dividieren.
Was soll mit Cells(9 + lngZ, 4) geschehen, wenn lngTotalUn = 0 ist, die Division also nicht klappt?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Nochmal Erklärung zu meiner Frage
16.02.2011 21:00:50
Holger,
Guten Abend Erich,
da hast du recht.
Ich muss das nochmal überprüfen ob der Nenner oder Zähler null sein kann (eines ist immer eine positive Zahl größer 0), nicht dass hier ein Fehler vorliegt.
Allgemein:
Da ein Laufzeitfehler kommt und ich nicht mit On Error Resume Next arbeiten möchte,
habe ich die If abfrage geschrieben. Leider berechne ich sehr viele Faktoren und
bei jedem brauche ich dann die If Abfrage.
Eine Zeile Code wäre mir lieber gewesen als drei und drei deshalb weil jede
If Abfrage auch immer mit End if geschlossen werden soll.
Vielleicht sollte ich eine Function bauen und die jedesmal benutzen?
Gruß+Dank
Holger
Anzeige
Ein-Zeilen-If
17.02.2011 01:21:57
Erich
Hi Holger,
""Eine Zeile Code wäre mir lieber gewesen als drei und drei deshalb weil jede If Abfrage
auch immer mit End if geschlossen werden soll."
Stimmt wohl nicht so ganz. Dies ist ein sinnvoller Einzeiler:
If lngTotalAge > 0 Then Cells(9 + lngZ, 4) = lngTotalAge / lngTotalUn
Da wird kein "End If" gebraucht.
Nicht beantwortet hast du die auch dafür wesentliche Frage:
"Was soll mit Cells(9 + lngZ, 4) geschehen, wenn lngTotalUn = 0 ist, die Division also nicht klappt?"
Und zu deiner Frage:
"Vielleicht sollte ich eine Function bauen und die jedesmal benutzen?"
Kaum - was soll das bringen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Ein-Zeilen-If
17.02.2011 08:56:08
Holger,
Hallo Erich,
die Frage, was geschehen soll, habe ich oben beantwortet, nämlich dann soll einfach nichts
in die Zelle geschrieben werden.
Den Einzeiler hatte ich auch schon, aber das ist halt etwas unübersichtlicher und da mehrere Kollegen
an einem Projekt programmieren, schliessen wir jedes if mit einem End if, kein Doppelpunkt, etc etc.
Gruß
Holger
Antwort nicht gefunden
17.02.2011 09:49:35
Erich
Hi Holger,
"die Frage, was geschehen soll, habe ich oben beantwortet,
nämlich dann soll einfach nichts in die Zelle geschrieben werden."
Wo und wann hast du diese Frage denn schon beantwortet?
Ein Link auf deine Antwort oder eine Uhrzeit wäre schön...
Dass im Null-Fall nichts in die Zelle geschrieben wird, ergibt sich ja aus deinem eingangs geposteten Code.
Das bedeutet dann aber auch, dass irgend ein alter Wert, der in Cells(9 + lngZ, 4) steht
(vielleicht aus einer früheren Berechnung) dort stehen bleibt. Vielleicht sollte man den dann besser löschen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Blöde Regelung, denn 1Zeiler (auch mit :)...
17.02.2011 10:39:15
Luc:-?
…sind in VBA nunmal performanter, Holger;
nur der OO-VBA-Adapter mag die nicht!
Gruß Luc :-?
Tja, so wolle das die C# Programmierer ...
17.02.2011 15:36:21
Holger,
und ich bin nur ein kleines Licht.
Tja, so wolle das die C# Programmierer ...
17.02.2011 15:36:21
Holger,
und ich bin nur ein kleines Licht.
das muss aber ...
16.02.2011 16:28:08
Rudi
Hallo,
        If lngTotalUn  0 Then
Cells(9 + lngZ, 4) = lngTotalAge / lngTotalUn
End If

heißen.
Gruß
Rudi
AW: das muss aber ...
16.02.2011 21:01:56
Holger,
Hallo Rudi,
auch wenn ich weiss, dass es keine negativen Zahlen geben kann?
Ja, das muss!
17.02.2011 01:38:37
Erich
Hi Holger,
Rudi meinte insbesondere dies:
Du musst lngTotalUn auf Null prüfen, wenn du danach durch lngTotalUn dividierst.
Stattdessen hast du lngTotalAge auf Null geprüft. lngTotalAge darf aber Null sein,
ohne dass es einen Fehler gibt.
Also muss statt
If lngTotalAge > 0 Then
das hier geprüft werden:
If lngTotalUn > 0 Then
Ob man auf größer oder ungleich Null prüft, macht nichts aus, wenn keine negativen Zahlen auftreten.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Na klar, ab xl12 mit Fkt WENNFEHLER...! ;-) orT
16.02.2011 17:49:22
Luc:-?
…Sonst — wie denn…?! :->
Gruß Luc :-?
AW: Division durch null vermeiden?
16.02.2011 17:54:22
Reinhard
Hallo Holger,
meinst du so

Sub nn()
Cells(1, 4).Value = IIf(lngTotalUn = 0, "Und nu?", lngTotalAge / lngTotalUn)
End Sub

Wobei du wissen mußt, der Vergleich kann auch scheitern. Excel rechnet mit 15 signifikenten Stellen.
D.h., bei diversen Berechnungen vorher, könnte lngTotalUn nicht 0 sein sondern 0,00000000023 o.ä.
Wenn sowas auftreten könnte müßte man das so schreiben:

Sub nn()
Cells(1, 4).Value = IIf(if(abs(lngTotalUn 

Gruß
Reinhard
Anzeige
...und außerdem solltest (auch) du (R.) wissen,...
16.02.2011 18:53:49
Luc:-?
…dass die vbFkt IIf nicht wie erwartet fktt, wenn ein Teil des Konstrukts einen Fehler liefert. Seine Anwendung verbietet sich hier also!
Man kann allerdings eine eigene udFkt schreiben, die das abfängt (was der MS-Pgmmer bei IIf nicht getan hat, und die dann immer verwenden, aber letztlich fktt die dann analog mit If…Then…Else…
Gruß Luc :-?
AW: ...und außerdem solltest (auch) du (R.) wissen,...
16.02.2011 20:23:39
Reinhard
Hallo Luc,
du hast wie sehr gelegentlich *sehrsehrschwergrins* Recht.
Ich weiß ja zur Genüge, daß die MS-Programmierer eine sehr eigene Logik haben.
Z.B. ist mir völlig unverständlich, vergleichbar mir der Anfrage hier, wenn man sowas hat
If a/b =5 Or c/d=7 Then
warum da ein Fehler kommt wenn wenn d 0 ist aber a/b =5 erfüllt ist?
D.h., es werden immer alle Bedingungen einer IF Abfrage geprüft, obwohl ich das als sinnlos ansehe bei OR, wenn da die erste Bedingung erfüllt ist, wozu die anderen alle noch abprüfen?
Ich habs jetzt nicht geprüft weil ich dir vertraue, das ist also in/mit IIF genauso. Gut, so genau wußte ich das gar nicht, danke.
Gruß
Reinhard
Anzeige
Nee, nee mit If ist das nicht so, nur mit IIf,...
16.02.2011 22:01:07
Luc:-?
…Reinhard,
denn das ist 'ne Fkt! Ansonsten wird Y in X Or Y nur abgefragt, wenn X nicht erfüllt ist. Kann aber sein, dass ein Y=c/d mit d=0 das stört, weil möglicherweise die Berechnung von c/d das Primat vor dem Vgl hat. Man sollte also solche Vgle nicht machen!
Gruß Luc :-?
AW: Nee, nee mit If ist das nicht so, nur mit IIf,...
19.02.2011 15:25:14
Reinhard
Hallo Luc,
verzeihe, aber ich sehe das anders, für mich werden alle Bedingungen in einer langen IF-Abfrage geprüft, unabhängig davon daß bei z.B. OR schon die erste Bedingung erfüllt ist.
wie hier: If 2 - 1 = 1 Or 1 / 0 = 1 Then MsgBox "ok"
was einen Fehler erzeugt, welchen ist klar.
Bei OR ist es schlecht, aber bei AND und vielen Bedingungen schreibe ich die Bedingungen einzeln untereinander mit eigenem IF.
Ich erhoffe/erwarte mir dadurch einen Schnelligkeitsvorteil. Ist das falsch gedacht oder korrekt?
Danke ^ Gruß
Reinhard
Anzeige
Auswertung von Ausdrücken bei OR
19.02.2011 16:22:52
Ausdrücken
Hi Reinhard,
Luc hatte ja geschrieben
"Kann aber sein, dass ein Y=c/d mit d=0 das stört, weil möglicherweise die Berechnung von c/d das Primat vor dem Vgl hat."
und damit die Aussage davor: "wird Y in X Or Y nur abgefragt, wenn X nicht erfüllt ist"
na ja, sagen wir, eingeschränkt.
Ihr beide seid euch also einig - gilt auch für uns drei. :-)
If 2 - 1 = 1 Or 1 / 0 = 1 Then MsgBox "ok"
kann man leicht sicherer schreiben:
If 2 - 1 = 1 then
MsgBox "ok"
elseif 1 / 0 = 1 Then
MsgBox "ok"
end if
Wenn es um etwas viel Längeres als MsgBox geht, könnte man das z. B. in eine Prozedur auslagern oder Gosub verwenden.
Schönes Wochenende und Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Auswertung von Ausdrücken bei OR
19.02.2011 17:32:05
Ausdrücken
Hallo Erich,
daß mit dem einig läuft super :-)
Ich bin ja als nicht so Vba-Profi nicht uneinig wenn ich was nachfrage. Ich will ja nur wissen wie ich mich verbessern kann.
Persönlich ist es mir völlig wurscht ob ich in eine IF-Zeile mehrere Bedingungen einbaue oder alles mit Einzel-IFs abrprüfe.
Ich möchte ja nur wissen, was "besser" ist.
Die Problematiken, wenn dadurch irre lange Codezeilen entstehen sind mir bewußt.
Z.B. daß wenn man den Code irgendwo in einem Forum postet bzw. daraus kopiert, dann klappt das mit den Unterstrichen nicht, bzw. das was der parser der Webseite aus einem 150 Zeichen langen Codezeile macht.
Gut, kann man manuell bereinigen im Editor oder theoretisch ein Makr basteln was in der Zwischenablage den Text verbessert. Also kein Problem.
Oder wenn es um Zeilen und Spalten geht, diese als Integer definiere oder als Long.
Durch das Wort zum Sonntag von Nepu weiß ich, immer als Long.
Das ist einfach zu merken und mache ich seitdem.
Ups, hab mich grad gedanklich verzettelt, bin auch abgelenkt durch einen spannden Film im TV :-)
Ich hoffe ich hab alles gesagt was ich sagen wollte.
Gruß
Reinhard, nicht Multitasking fähig *gg*
Anzeige
Ich entscheide das fallweise u.fasse meist...
19.02.2011 20:15:10
Luc:-?
…sinnvoll zusammen — Or und And, Reinhard!
Euch einen schöSo, Luc :-?

240 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige