Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
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 wird ignoriert, obwohl TRUE

If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 19:45:44
Frank
Guten Abend in die Runde,
ich habe ein sehr merkwürdiges Problem in VBA, an dem ich nun seit drei Tagen sitze.
Ich habe Public Sub1, von der aus ich eine andere Public Sub2 mit zwei Werten bediene. Alles ist identisch, ich habe es etliche Male getestet. Die beiden Werte sind Global definiert. Wenn ich in der Sub1 die Werte e1 und e2 fest vorgebe, dann ergeben sich in der Sub2 die richtigen Werte. Wenn ich in der Sub1 die Werte berechnen lasse und es ergeben sich die selben Ergebnisse und diese dann zur Sub2 übergebe, dann passiert folgendes:
e1 = 25. ec3 = 25 --> Ich frage ab, If e1 Vielen Dank und viele Grüße
Frank.

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bitte Typ der Werte mitteilen! Gruß owT
27.11.2022 20:09:34
Luc:-?
:-?
AW: Bitte Typ der Werte mitteilen! Gruß owT
27.11.2022 20:17:26
Frank
Guten Abend Luc. Beide Werte sind vom Typ Double. Die Datei ist vertraulich. Wäre es möglich Sie dir persönlich zukommen zu lassen?
Es dürfte auf Gleitkomma-Problematik ...
28.11.2022 09:51:53
Luc:-?
…hinauslaufen, Frank
eine hilfreiche Antwort wurde dir allerdings bereits gegeben - auf bestimmte signifikante DezimalStellenzahl runden; ggf mal mit Datentyp Long versuchen, falls der ausreicht.
Morhn, Luc :-?
AW: Es dürfte auf Gleitkomma-Problematik ...
28.11.2022 14:14:19
Frank
Guten Tag Luc,
vielen Dank auch für deine Antwort. Es liegt wirklich am Runden. Wenn ich es auf 14 Stelle runde, läuft es sauber durch.
Wie meinst du das mit dem Datentyp Long? Das ist eine Ganzzahl. Oder meintest du vielleicht Decimal?
Viele Grüße
Frank
Anzeige
Long ist nur möglich, ...
28.11.2022 22:39:40
Luc:-?
…Frank,
wenn dein Vglswert immer Long sein soll und das Ergebnis nicht auch anderweitig mit Dezimalen benötigt wird.
Mit Decimal kann man Zahlen mit mehr als den üblichen 15 Stellen berechnen, aber in Xl nur als Text abbilden (anderenfalls rundet Xl automatisch auf 15). Diesen Typ kann man aber nicht von vornherein deklarieren, sondern nur Variant-Werte entsprechend umformen (Max 28 reguläre Stellen).
Gruß, Luc :-?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 20:11:56
ralf_b
sowas nur mit Beispieldatei.
sonst kann man nur raten.
Nutzt du Option explicit?
Gehört der Punkt hinter der ersten 25 zum Wert?
Vergleichst du Text mit Zahlenwerten?
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 20:18:50
Frank
Guten Abend Ralf_B,
ja, ich nutze Option Explicit. Nein der Punkt war das Ende des Satzes. Nein, ich vergleiche Double mit Double. Die Datei ist vertraulich. Wäre es möglich Sie dir persönlich zukommen zu lassen?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 20:46:20
onur
Was kommt denn bei
msgbox e1 - ec3
heraus ?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:05:39
Frank
Das :-(
Userbild
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:07:06
onur
Hab ich mir gedacht - die beiden Zahlen sind nicht identisch. Wo kommen sie genau her und warum double?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:25:08
Frank
Ja, da hast du Recht. Aber die Abfrage lautet ja "kleiner gleich". Und trotzdem wird es ignoriert.. Und warum geht es einmal, wenn ich die Zahlen "direkt" in die Sub reingebe und einmal nicht?
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:33:02
onur
1) e1 ist GRÖßER als ec3.
2) Wieso beantwortest du meine Frage nicht?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:51:32
Frank
Ich beantworte dir gern deine Fragen.
Ich habe die Variablen hier im Forum vereinfacht. Es geht um eco und ec3. Gemäß der Überwachung sind beiden Zahlen identisch.
Userbild
Userbild
Userbild
Userbild
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 21:57:01
onur
Ich meinte die Vorgeschichte der beiden. Woher (welche Kalkulationen oder welche Zellinhalte) kommen die beiden "25" GENAU ? Die müssen ja irgendwoher diese Zahlen als Inhalt bekommen haben.
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:20:58
Yal
Hallo zusammen,
im Grund genommen ist es egal, woher die Zahlen kommen. eco ist ab der 14 Nachkommastelle grösser als ec3.
(das klassische Problem der Ungenauigkeit der Nachkommastellen im binäre Welt).
Einfach den Abgleich auf gerundeten Werten machen (sind 8 Nachkommastellen präzis genug?), dann sie die Werte gleich:
If Round(eco, 8) <= Round(ec3, 8) Then
VG
Yal
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:26:17
onur
Das hat mit den Nachkommastellen nix zu tun. auch mit ZWEI oder DREI Nachkommastellen ergibt 1 geteilt durch 7 die Zahl 0,14 bzw 0,142. beides mal 7 ergibt immer noch nicht eine EINS.
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:33:14
Yal
Da hast Du Recht in deinem Beispiel, aber hier geht es darum, zwei Werte miteinander zu vergleichen, die wohl auf verschiedene Art und Weise berechnet worden sind (na ok, genau an der Stelle bin ich wieder bei Dir: man müsste analysieren, wie die Werte berechnet wurden).
Aber wenn die Unterscheid auf die Ebene 7E-15 liegt, dann kann man vielleicht auch mit "nicht ganz genauer Vergleich" eine Gleichheit akzeptieren. So meinen Vorschlag. Was da gemessen wird kann ich nicht beurteilen. Der Fragende sollte Stellung nehmen, ob diese Pragmatismus ihn ausreicht.
Ich wünsche Dir eine gute Nacht. Mein Rechner geht auch jetzt schlafen.
VG
Yal
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:01:22
Frank
Variante 1: Ich gebe mir die Zahlen fest vor und übergebe sie
Variante 2: ich berechne die Zahlen und übergebe sie
Userbild
Userbild
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:14:07
onur
Willst du mich verarschen? Was du jetzt gepostet hast, enthält weder "eco" noch "ec3".
Ausserdem hast du auch noch Überschneidungen bei den Cases: 0 to 5, 5 to 6 usw ? Zwei mal die 5, 2x die 6 und 2x die 16 ?
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:20:24
onur
Ich hab weder die Zeit noch die Lust, noch mehr Fragen zu stellen, die nicht oder falsch beantwortet werden.
Wenn nicht ganz zufällig das mit "CASE" das Problem war: Wenn du nicht langsam die Datei postest, bin ich raus.
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 08:28:44
Frank
Guten Morgen Onur. Nein, ich möchte Dich nicht verarschen. Es tut mir leid, wenn ich Dir nicht hinreichend geantwortet habe. Die Datei ist ziemlich komplex. Ich würde Sie dir gern persönlich schicken. Fakt ist, dass ist den Wert 25 einmal fest vorgebe und einmal berechne. Man sieht in dem Screenshot von mir, dass es ja offensichtlich 25 ist. Würdest du dir die Datei einmal ansehen wollen? Ich kann auch versuchen die Datei auf das Problem zu begrenzen und online stellen. Vielleicht sagst du mir wie du es gern hättest.
AW: If Abfrage wird ignoriert, obwohl TRUE
27.11.2022 22:48:45
snb
Es gibt nur 1 Problem: du ignorierst den Versuch eien Beispieldatei hoch zu laden.
Offensichtlich ist dein 'Problem' nicht wichtig genug.
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 08:33:02
Frank
Ich habe bereits eingangs geschrieben, dass die Datei vertraulich ist und ich sie nicht einfach hier hochladen kann.
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 11:54:38
Frank
An Onur und Yal und Alle Anderen die es interessiert. Ich bereite gerade eine Datei vor und lade Sie dann hoch.
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 11:59:09
Yal
Hallo Frank,
ich gehe davon aus, dass damit mein Vorschlag vom 27.11.2022 22:20:58 "mit gerundeten Wert arbeiten" nicht deine Bedürfnis entspricht...
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 13:49:30
Frank
Hallo Yal,
doch dein Vorschlag gefällt mir sehr gut. Wenn ich Round(eco,14) kleiner ec3 eingebe, dann ist es TRUE. Ich habe da so lange drüber gesessen, weil im Lokalfenster beide Werte mit 25 dargestellt werden und ich an mir selbst gezweifelt habe, warum er da drüber springt. Und vielen Dank auch an Onur, die beiden Werte einmal voneinander zu subtrahieren. Wie kann ich dann eine genauere Ausgabe, als wie Sie im Lokalfenster dargestellt wird ausgeben? Theoretisch müsste ja Null rauskommen.
ich habe die Datei bis eben komplett abgespeckt... Allerdings habe ich so weit runter gekürzt, dass nun wenn ich eco - ec3 rechne Null raus kommt. Vorher nicht. Ich suche jetzt an welcher Stelle das liegt.
Vielen Dank erst einmal an dieser Stelle an Alle die sich meinem Problem gewidmet haben.
Schöne Grüße
Frank
Anzeige
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 14:07:04
onur
Nimm mal die Kennzifferberechnungen, vor allem die, bei denen die Division eine Zahl mit Periode ergibt, in Klammern, - also statt z.B.
* (Kennziffer - 16) / 17
das hier
* ((Kennziffer - 16) / 17)
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 15:25:44
Frank
Hallo Onur,
vielen Dank für deine Nachricht. Es bleibt dabei, dass die eco - ec3 eine sehr kleine Zahl ausgibt. Ich verstehe nicht, warum im Lokalfenster zwei Mal 25 angezeigt wird, wenn anscheinend einer der beiden Werte nicht 25 ist.
Schöne Grüße
Frank
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 16:45:12
Yal
Es ist mal so, dass lokale Fenster vereinfachung vornimmt. Lokalfenster ist ein Debug-Instrument, kein Enduser-Anzeige. Daher war der Riecher von Onur schon richitg auf dem Delta zuzugehen.
Prinzipiel ist dein Zahl auch = 25, 000 000 000 000 007
zu diesem Thema: https://www.massmatics.de/merkzettel/#!1315:Kommazahlen , Absatz "Probleme mit Kommazahlen in der Programmierung"
Zu den Klammer-Tipp von Onur: ich würde sogar hinzufügen: bei Mischung von Multiplikation und Division immer zuerst die Multiplikation, dann die Division. Wenn mehrere Divisor, deise miteinander multiplizieren, dann nur eine Division berechnen.
VG
Yal
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 17:00:37
Frank
Hallo nochmal an Onur und Yal,
ich habe heute immer so wie ich Zeit hatte daran gearbeitet. Ich meine wenn da im Lokalfenster 25 bei beiden Zahlen steht, dann nehme ich das für bare Münze. Ich habe mir die Zahlen auch in ein Editor Fenster kopiert. Wenn ich das mit alle Kommastellen so durchtippe, dann komme ich genau auf 25. Das bedeutet im Umkehrschluss, dass der intern eine andere längere Zahl verwendet und beantwortet auch die Frage, warum es funktioniert wenn ich die Zahlen fest vorgebe (mit 14 Nachkommastellen) und warum es nicht funktioniert wenn ich es durchrechnen lasse.
Die Select Case Anweisung habe ich auf If Anweisungen umgestellt. Vielen Dank Onur. Vielen Dank auch für den Link Yal, lese ich mir gleich durch.
Ich hatte heute überlegt, die Berechnung einmal auf den Datentyp Decimal umzustellen, "nur" um zu sehen was da gerechnet wird. Ich habe mir die Hilfe zu Decimal durchgelesen. Hat diesen Datentyp schon einmal verwendet?
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 17:04:04
Frank
Das Problem tritt sozusagen schon weiter "vorn" auf im Code auf... Ich rufe als letztes eine Function auf die dann eco und ec3 miteinander vergleicht. Aber im Code selbst taucht das Problem schon wesentlich früher auf.
Userbild
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 17:43:43
onur
Mal Off Topic: Warum schreibst du eigentlich nicht einfach

=Stützpunkte(j) * (yA-yE) / 2 + (yA+yE) / 2 'y-Koordinate Gauß-Punkt
?
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 18:57:03
Frank
Ja :-), da stimme ich dir zu...
AW: If Abfrage wird ignoriert, obwohl TRUE
28.11.2022 12:43:07
ralf_b
sensible Daten gehören nicht in ein Forum ,aber auch nicht an irgendwelche, dir unbekannten Helfer, geschickt.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige