Hallo,
ich möchte bei diesem Code von xlKing auf die Gleitkommazahlenproblematik hinweisen:
Public Function CompVals(TestRange As Range) As String
If IsNull(TestRange.Text) Then
For Each v In TestRange
If v <> "" Then
If Not IsEmpty(w) And v <> w Then
CompVals = "Not Equal"
Exit Function
End If
w = v
End If
Next
End If
CompVals = "All Equal"
End Function
hier wird in der Bedingung w <> v auf Ungleichheit geprüft. Da die Variable w nicht deklariert ist, wird standardmäßig Variant/Double benutzt. Wenn eine Zahl auf zwei verschiedenen Rechenwegen berechnet wird, dann kann es sein, dass sich die beiden Ergebnisse in den letzten Nachkommastellen unterscheiden, obwohl sie eigentlich identisch sein müssten. Obiger Vergleich (w <> v) ergibt dann aber war, obwohl die Ergebnisse identische Zahlen repräsentieren, ohne identisch zu sein:
msgbox (1 <> 1.0000000000000001)
msgbox (1 = 1.0000000000000001)
Deswegen würde ich die Bedingung anders formulieren:
abs(v-w) > 0.00000000000001
Die Nachkommastellen kannst du im Rahmen der Rechengenauigkeit von Excel und deinen Anforderungen anpassen (falls dir nichts besseres einfällt, sollte obiger Vorschlag funktionieren).
Grüße, Ulrich
|