Hallo Clemens,
genau das ist dein Problem: du betrachtest aber alle Nachkommastellen!
Ich gehe davon aus, dass es sich um Zahlen (im Gegensatz zu Zeichenketten/Wörtern) dreht.
Ob dich die Nachkommastellen interessieren oder nicht, ist dem Computer egal. Sobald du Zahlen auf Gleichheit / Ungleichheit überprüfst, wird die gesamte Zahl mit allen zur Verfügung stehenden Nachkommastellen verglichen.
Das bedeutet für dich: da dich nur eine bestimmte Anzahl an Nachkommastellen interessiert, mussst du beim Vergleich dafür sorgen, dass nicht alle Nachkommastellen Einfluss auf das Ergebnis haben.
Hier ein Beispiel wie man es nicht macht (und du es im Augenblick aber machst): In A1 trage ich eine Formel ein, deren analytisches Ergebnis exakt 0,1 ist. Mich interessiert also nur eine Nachkomastelle. Dann frage ich ob der Wert der Zelle 0,1 ist:
Sub Beispiel()
Range("A1").Formula = "=1.12/11.2"
If Range("A1").Value <> 0.1 Then MsgBox "A1 <> 0,1"
If Range("A1").Value = 0.1 Then MsgBox "A1 = 0,1"
If Range("A1").Value < 0.1 Then MsgBox "A1 < 0,1"
If Range("A1").Value > 0.1 Then MsgBox "A1 > 0,1"
Range("A2").Value = 0.1
Range("A3").Formula = "=A1=A2"
MsgBox "A1 = A2 ist " & (Range("A1") = Range("A2"))
End Sub
Was sagt dein Excel zum Zellwert in Zelle A1? Ist er gleich 0,1, ungleich, größer als oder kleiner als?
Was kommt beim Vergleich der Zellinhalte von A1 und A2 heraus? Gibt es Unterschiede zwischen VBA und der Formel in A3?
Führe ich das Beispielmakro bei mir aus, kommt heraus, dass der Zellwert in A1 nicht exakt 0,1 ist.
Die Problemetik besteht in VBA bei allen Zahlen, die Kommastellen haben - egal wie viele Kommastellen!
Die Problematik besteht übrigens auch auf dem Tabellenblatt (bei mir wird in A3 zwar "WAHR" angezeigt, das ist aber mehr oder weniger Zufall!). Dieses Beispiel ist kein Beweis dafür, dass die Problematik auf dem Tabellenblatt ohne VBA nicht bestünde.
Daher die Regel: ist eine Variable nicht als Integer oder Long deklariert, darf man sie nicht mit dem Gleichheitszeichen oder dem Ungleichheitszeichen vergleichen!
Verstößt man gegen diese Regel führt das in manchen Fällen zu falschen Ergebnissen. Und dann versteht niemand, weshalb die Ergebnisse falsch sind (solche Fehler sind immens schwer zu finden!).
Das darfst du nicht unter den Teppich kehren, sondern es jetzt ein Mal begreifen und niemals vergessen ;-) .
Zu den msgboxes, die ich beim letzten Post benutzt habe: Ja, stimmt im VBA-Editor kann man so viele Nachkommastellen nicht benutzen. Ich hätte erwähnen sollen, dass sie dafür gedacht waren, sie im Direktfenster zu benutzen. Sorry!
Grüße, Ulrich
|