Scheinbar identische Werte führen zu Unterschieden durch VBA bzw. Funktion
#1
Hallo zusammen,

ich Arbeite derzeit mich einem Datensatz in Excel, der durch eine Datenbankabfrage (nicht von mir) erzeugt wurde. In einem VBA-Code haben ich dann per If abgefragt, ob ein Wert z.B. gleich 0,7 ist. Das klappt in fast allen fällen, jedoch laufen einige ins else, obwohl sie (optisch) gleich 0,7 sind. Überschreibt man diesen Wert händisch mit 0,7 klappt alles einwandfrei. Demnach ist also der Wert aus der Datenabfrage ungleich 0,7. Gehe ich jedoch nicht den weg über if im vba sonder über eine Wenn-Funktion in der Standardoberfläche, so ist die Gleichheitsbedingung erfüllt.
Ich vermute dass der Wert beispielsweise 0,700000000000001 oder ähnliches beträgt , kann dies jedoch nicht nachweisen. Nun stehe ich vor dem Problem, dass ich gerne alle 0,7er mit der If-Abfrage einfangen will und nie sicher bin ob auch wirklich alle erwischt wurden.
Hat jemand bereits ein ähnliches Problem festgestellt oder weiß womöglich weiter?

Ich habe den folgenden Code für den richtigen und falschen 0,7er getestet und stelle den unterschied damit fest.

Code:
Sub Fehlererzeugen()

   If Cells(4, 2) = 0.7 Then
       Cells(4, 4) = "Ja"
   ElseIf Cells(4, 2) < 0.7 Then
       Cells(4, 4) = "kleiner als 0,7"
   ElseIf Cells(4, 2) > 0.7 Then
       Cells(4, 4) = "größer als 0,7"
   Else
       Cells(4, 4) = "wedernoch"
   End If
   
   If Cells(5, 2) = 0.7 Then
       Cells(5, 4) = "Ja"
   ElseIf Cells(5, 2) < 0.7 Then
       Cells(5, 4) = "kleiner als 0,7"
   ElseIf Cells(5, 2) > 0.7 Then
       Cells(5, 4) = "größer als 0,7"
   Else
       Cells(5, 4) = "wedernoch"
   End If
   
End Sub
Ich habe das Dokument
.xls   Fehlerdiagnose.xls (Größe: 27,5 KB / Downloads: 3)  mit beiden Werten angehängt und diesen Code sowie die Wenn-Funktionen verwendet.

Liebe grüße!
Top
#2
Moin,
ich würde mit der RUNDEN()-Funktion arbeiten, gerne auch mit 5 Nachkommastellen. Dann sollte sich das Problem erledigt haben ...

EDIT: Eben war der Code bei mir noch nicht zu sehen ...
mal sehen, was dabei heraus kommt...

So, nach einigem Suchen und wundern ...
Das Lieblingswort des Mr. Spock: "Faszinierend ..."  :s

Code:
MsgBox CDbl(Cells(4, 2)) = 0.7
MsgBox CDbl(Cells(5, 2)) = 0.7

warum auch immer, denn IDENTISCH() bringt auch WAHR
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#3
Hi,

Zitat:Ich vermute dass der Wert beispielsweise 0,700000000000001 oder ähnliches beträgt , kann dies jedoch nicht nachweisen

Du brauchst doch nur die Anzahl der Kommastellen erhöhen.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#4
Ich danke Ihnen für Ihr Interesse und war ganz überrascht weil ich kürzlich im Zuge meiner Arbeit sogar schon von Ihnen und der Seite Excel ist Sexy profitieren konnte (sortieren von eindimensionalen Arrays)
Danke dafür :)

Möglicherweise werde ich Ihren Lösungsansatz so verwenden und alle Daten zunächst runden falls das nötig sein wird. Natürlich muss ich zugeben, dass die Feststellung der Ursache der Faszination die Neugier deutlich mehr befriedigen würde ... :D

PS: 30 Nachkommastellen lüften das Geheimnis nicht
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste