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

If-Abfrage liefert falsches Ergebnis

If-Abfrage liefert falsches Ergebnis
31.10.2016 14:10:44
Andreas
Hallo,
ich habe in einem Makro eine Abfrage, welche mir die Schriftfarbe ändern soll, wenn der Wert nicht der Vorgabe entspricht. Läuft soweit auch gut, nur das Ergebnis im oberen Grenzbereich wird falsch wiedergegeben. Alle Zahlen sind fix mit 2 Nachkommastellen. Liegt das Ergebnis im unteren Grenzbereich, funktioniert es wie gewünscht, im oberen hingegen wird schon bei max die Schriftfarbe geändert.
  • If Target max Then

  • Ist zB min = 1,50 und max 1,80, bleibt bei 1,50 die Schriftfarbe unverändert, bei 1,80 erfolgt dagegen die Änderung der Farbe. Bei Eingabe von 1,799999999 erfolgt die Aufrundung auf 1,80 und die Farbe ändert sich nicht. Wie gesagt, vorgegebene Werte umfassen nur 2 Stellen nach dem Komme. Evtl. könnte ich die Abfrage umdrehen (max kleiner Target), oder zu max einfach 0,00000000001 dazu addieren, aber das kann es eigentlich nicht sein.
    Evtl. jemand eine Idee, warum das so ist?
    Danke und Grüße
    Andreas

    14
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 14:14:08
    Hajo_Zi
    Hallo Andreas,
    sollte es nicht And lauten, da es in dem Bereich sein soll?

    falsche Antwort oT
    31.10.2016 14:28:27
    Hajo_Zi
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 14:37:05
    Andreas
    Hallo Hajo,
    wird mit And nicht überprüft, ob beide Bedingungen erfüllt sind? Es trifft ja jeweils nur eines der Argumente zu.
    Was ich vergessen habe zu erwähnen ist, dass ich das gleiche Makro in ca. 300 Dateien nutze, das Problem aber nur in ca. 10 Dateien auftritt. Habe schon alles kontrolliert und verglichen (Formatierung der Zellen, eingegebene Zahlen etc.), komme aber halt nicht dahinter, warum es bei ein paar nicht richtig wiedergegeben wird. Habe es auch schon mit Einzelschritten des Makros verfolgt und an der Stelle sehe ich dann, dass die Werte richtig ermittelt werden, also es steht für Target 1,80 und für max 1,80 und dennoch springt er teils halt in nächste Zeile, obwohl diese eigentlich übersprungen werden müsste. Ich versteh es nicht :-(
    Grüße
    Andreas
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 14:39:27
    Hajo_Zi
    Hallo Andreas,
    nur wenige sehen die Datei in der der Fehler auftritt.
    Nur wenige sehen den kompletten Code.
    Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
    Ein Nachbau sieht meist anders aus als das Original.
    Gruß Hajo
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 14:56:45
    Andreas
    Hallo Hajo,
    es soll keiner was programmieren oder ähnliches, wollte nur wissen, ob diesbezüglich etwas bekannt ist.
    Habe inzwischen noch etwas herumprobiert und das Phänomen tritt nur bei gewissen Zahlen auf.
    Ua tritt es bei der Zahl 1,55/ 1,56/ 1,57/ 1,58/ 1,59 auf, nicht aber bei 1,54, 1,65, 1,66 oder anderen.
    Grüße
    Andreas
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 15:00:08
    Hajo_Zi
    Hallo Andreas,
    Du möchtest also Deine Datei nicht verlinken. Also ist das raten angesagt.
    Es ist Text der nur aussieht wie eine zahl.
    Weitere Vorschläge habe ich nicht und bin dann raus.
    Gruß Hajo
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 15:24:44
    Andreas
    Hallo Hajo,
    sorry, wenn ich mich mit der Forensprache nicht so auskenne und es ein Hinweis zur Ansicht des Codes sein sollte.
    Den gesamten Code hier abzubilden, wäre etwas viel und Bedarf einer erweiterten Erklärung.
    Habe das Teilstück nachgebaut und dort tritt der "Fehler" reproduzierbar auf.
    Private Sub Worksheet_Change(ByVal Target As Range)
    Min = Sheets(2).Range("A1") - Sheets(2).Range("B1")
    Max = Sheets(2).Range("A1") + Sheets(2).Range("B1")
    If Target  Max Then
    Target.Font.Color = 255
    End If
    End Sub
    
    Auf Blatt 2 in A1 der Basiswert (1,40) und die Schwankungsbreite in B1 (0,15), alles als Zahl mit 2 Kommastellen.
    Grüße
    Andreas
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    31.10.2016 15:56:16
    Daniel
    HI
    probiers mal mit
    max = worksheetfunction.round(Sheets(2).Range("A1") + Sheets(2).Range("B1"), 2)
    Gruß Daniel
    AW: If-Abfrage liefert falsches Ergebnis
    01.11.2016 09:49:49
    Gerd
    Hallo,
    für die Ursache(Double-Fehler) kannst du nach "Excel rechnet falsch" googeln.
    Ein weiteres probates Mittel, ist die Konvertierung der Zellenwerte.
    Private Sub Worksheet_Change(ByVal Target As Range)
    Min = CCur(Sheets(2).Range("A1")) - CCur(Sheets(2).Range("B1"))
    Max = CCur(Sheets(2).Range("A1")) + CCur(Sheets(2).Range("B1"))
    If Target  Max Then
    Target.Font.Color = 255
    End If
    End Sub
    
    Gruß Gerd
    AW: If-Abfrage liefert falsches Ergebnis
    01.11.2016 12:23:17
    Andreas
    Hallo Daniel, hallo Gerd,
    Lösungen funktionieren. Wäre nicht darauf gekommen, dass Excel bei festen Werten mit 2 Stellen nach dem Komma und einfacher Addition/Subtraktion solch ein Problem hat. Bei freien Werten, oder wenn Zahlen multipliziert/dividiert werden, ists für mich nachvollziehbar, aber so? Zumal dies nur bei gewissen Werten nach dem Komma auftritt. Für mich als Laie wirkt es wie ein spezieller Fehler.
    Danke
    Grüße
    Andreas
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    01.11.2016 12:31:43
    Daniel
    Hi
    das ist ein genereller Fehler.
    grundsätzlich ist es so, dass es in jedem Zahlensystem Werte gibt, die sich bei begrenzter Speicherkapazität nur ungenau und leicht gerundet darstellen lassen.
    im Dezimalsystem wären das bspw Werte wie 1/3 oder 1/7.
    in anderen Zahlensystemen sind das andere Werte.
    Bei Computern kommt noch erschwerend hinzu, dass die Ein- und Ausgabe im Dezimalsystem erfolgt, die Berechnung aber im Dualsystem durchgeführt wird und die Werte daher immer von einem System ins andere umgerechnet werden müssen.
    Damit kombinierst du das Ungenauigkeitsproblem von beiden Zahlensystemen, so dass es auch bei einfachen Berechnungen wie der Addition zu kleinen Abweichungen im Ergebnis kommen kann.
    Gruß Daniel
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    01.11.2016 12:43:54
    Andreas
    Hallo Daniel,
    danke für die ausführliche Erklärung. So wird's langsam "Licht" bei mir :-)
    Das Problem ist halt im Betrieb aufgefallen, bin halt nur ein Noob-VBA-Schreiber und konnte den Kollegen bisher keine vernünftige Erklärung für das Phänomen gaben. Ist halt schwer nachvollziehbar, wenn man alles durchgeht (Einzelschritt etc.) und dann dort steht "1,55 größer 1,55 ist WAHR", da kommt man ins Grübeln^^
    Grüße
    Andreas
    AW: If-Abfrage liefert falsches Ergebnis
    01.11.2016 13:04:03
    Daniel
    Hi
    das Problem ist, dass wenn du über das Zahlenformat die Werte 2-stellig anzeigen lässt, trotzdem mit den vollständigen Werten gerechnet wird.
    im Zahlenformat "Standard" müssten solle Problemfälle auffallen.
    eine weitere Möglichkeit wäre, die Option "Genauigkeit wie Angezeigt" zu verwenden.
    dann rundet Excel den Zellwert immer auf die angegebene Stellenzahl.
    Allerdings lässt sich diese Option nur für die gesamte Mappe setzen, was ggf nicht immer erwünscht ist.
    Gruß Daniel
    Anzeige
    AW: If-Abfrage liefert falsches Ergebnis
    03.11.2016 11:34:06
    Andreas
    Hi Daniel,
    das Thema hat mir keine Ruhe gelassen und ich wollte mal sehen, welche Werte, ohne die genannte Korrektur, "falsche" Ergebnisse liefern. Dachte ja, es wären nur Zahlen im Bereich x,55 etc., aber weit gefehlt ^^
    Habe mal was selbst gestrickt. Geht bestimmt hübscher und besser, aber mehr kann ich nicht und auch keine Zeit.
    https://www.herber.de/bbs/user/109167.xlsm
    Mit Ccur oder Round ist ja nun alles i.O.
    Grüße
    Andreas

    126 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige