Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Rechenfehler Zeit Min <-> Sek | Herbers Excel-Forum


Betrifft: VBA Rechenfehler Zeit Min <-> Sek von: Björn B.
Geschrieben am: 11.11.2009 10:41:10

Hallo zusammen,

eigentlich ganz einfach, ich habe 2 Spalten, in A steht Zeit in Min, in B die Zeit in Sek.

A errechnet sich aus B. z.B. in A1 steht: =B1/60
Soweit so gut.

Wenn ich nun per VBA prüfe, ob die Werte zueinander passen, kommt bei Eingabe von 31 Sekunden in B1 für die Prüfung

MsgBox [b1] = [a1] * 60

FALSCH raus. WARUM???
Ich verstehe das nicht. Bei allen anderen Zeiten (außer 31 und 62 Sekunden, 93 geht wieder) funktioniert das.
Rechnet hier VBA anders als Excel? Und wenn ja wie?

Wenn ich mir das Ergebnis "[a1]*60" in eine Zelle schreiben lasse, dann steht da wieder die 31.
Das gibt es doch nicht.

Gruß
Björn B.

  

Betrifft: MsgBox [b1] - [a1] * 60 von: Erich G.
Geschrieben am: 11.11.2009 10:47:33

(ohne weiteren Text)


  

Betrifft: Schon klar, ... von: Björn B.
Geschrieben am: 11.11.2009 11:03:46

... ich weiß schon, dass ich das auch anders prüfen kann und dann kommt WAHR.

    MsgBox [b1] = [a1] * 60 'Hier kommt FALSCH
    MsgBox [a1] = [b1] / 60  ' Hier kommt WAHR


Ich will aber wissen, warum das so ist. Das darf doch eigentlich nicht passieren.
Wer sagt mir denn, dass Deine Berechnung nicht bei irgendeiner anderen Zeit einen Fehler bringt?

Irgendwas muss hier doch VBA falsch machen.

Wie kann ich das zuverlässig prüfen?

Gruß
Björn


  

Betrifft: Rechengenauigkeit von: Erich G.
Geschrieben am: 11.11.2009 11:42:42

Hi Björn,
"Das darf doch eigentlich nicht passieren."?
Doch, mit der Anzeige der Differenz wollte ich dir zeigen, dass das "FALSCH" durchaus ok ist.

Such mal hier bei "Alle Recherchen" z. B. nach Rechengenauigkeit.

31/60 ist ein unendlicher Dezimalbruch. In so einem Computer gibt es aber nur endlich viele Speicherplätze.
Deshalb wird der Wert natürlicherweise nicht genau gerechnet/gespeichert,
die Genauigkeit ist auf eine mehr oder weniger bestimmte Stellenzahl begrenzt.

Hier beträgt sie ca. signifikante 15 Stellen. Dahinter kann irgend etwas stehen.
Bei zwei mathematisch gleichen Werten können sich die Stellen dahinter unterscheiden,
wenn die Werte auf unterschiedliche Weise berechnet wurden.

Oft ist ein Ausweg, die Werte vor dem Vergleich noch mal zu runden.

Oder man prüft statt
a = b * c
die Differenz auf einen zulässigen Maximalwert:
Abs(a - b * c) < 0.000000000001

Bei großen Zahlen kann es natürlich genauso gut Probleme geben.
Die Formeln der Zeile 2 sind hier nach unten kopiert:

 ABCD
1111111111111111111111111111111111111111111111,000000000011111111,000000000000000
222222222222222277777777777777715873015873015,90000000001587301,571428570000000
344444444444444454444444444444402267573696145,1200000000226757,367346939000000
488888888888888838111111111111100323939099449,303000000032393,909620991200000
5177777777777778026677777777777800046277014207,04330000004627,701374427320000
6355555555555555018674444444444400006611002029,5776200000661,100196346760000
7711111111111110013072111111111100000944428861,368231000094,442885192394300

Formeln der Tabelle
ZelleFormel
A2=A1*2
B2=B1*7
C2=C1/7
D2=D1/7

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: Danke. von: Björn B.
Geschrieben am: 11.11.2009 13:24:17

Danke.

Sowas ähnliches habe ich vermutet.

Trotzdem verstehe ich nicht, warum VBA anders als Excel rechnet, dachte, die haben die gleiche Rechengenauigkeit.

Ich verstehe auch nicht, warum die Makro-Berechnung "falsch" rechnet, wenn ich die Ergebnisse aber anzeigen lasse oder in eine Zelle schreibe, dann sind sie wieder richtig...

Komisch.

Naja, wenigstens weiß ich jetzt, wie ich das ganze umgehen kann.

Vielen Dank für Deine Hilfe.

Gruß
Björn B.