Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
284to288
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
284to288
284to288
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

wahre If-Abfrage wird manchmal als falsch gewertet

wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 01:30:52
michael
Hallo Forum,

ich habe das kuriose Problem, daß eine wahre If-Abfrage manchmal als falsch gewertet wird.
Vorgehensweise:
alle x-Werte werden auf 0.02 gerundet
Cells(z, c).Value = WorksheetFunction.Round(Cells(z, c - 1).Value * 50, 0) / 50
es werden in einer Schleife 0,02 addiert um x_alt zu erhalten
If x_alt = x_wert Then

dabei tritt ab und zu der Fehler auf, dass gleiche Werte nicht als gleich behandelt werden.
Woran kann so etwas liegen???

Danke für Eure Hilfe

Michael

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

Betreff
Datum
Anwender
Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 10:34:04
ingo
Hallo michael,

ohne mir den Code genauer angeschaut zu haben, hast Du mal versucht, die Abfrage auf

If x_alt >= x_wert Then

umzuändern?

diese Abfrage sollte auch dann triggern, wenn die Round-Function nicht gegriffen hat.
Da Du schreibst, dass du x_alt in einer Schleife immer um 0.02 erhöhst, gehe ich davon aus, dass x_alt am Anfang auch immer kleiner x_wert ist (sonst Endlosschleife bei =-Abfrage)

Vielleicht reicht das ja schon.
Gruß Ingo


AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 11:03:44
michael
Hallo Ingo,

danke für deine Hilfe.
Ich denke ich muß bei = bleiben denn NUR bei Gleichheit darf der folgende Befehl durchgeführt werden. Ich werds aber mal testen.
x_alt ist am Anfang immer kleiner.
Wenn ich mit F8 Schrittweise durchgehe kann ich ja mit der Maus die momentanen Werte der Variablen abfragen und sehe dass die Werte als solches richtig sein sollten...

was meinst du eigentlich mit ...wenn die Round-Function nicht gegriffen hat?
dh könnte auch bedeuten dass If nicht greift?
kann eine Funktion mal nicht greifen und der Macro geht weiter?
Wenn ich mich richtig erinnere trat der Fehler auch schon bei Werten auf bei denen es nichts zu runden gab.

Grüße

Michael


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 11:04:39
michael
Hallo Ingo,

danke für deine Hilfe.
Ich denke ich muß bei = bleiben denn NUR bei Gleichheit darf der folgende Befehl durchgeführt werden. Ich werds aber mal testen.
x_alt ist am Anfang immer kleiner.
Wenn ich mit F8 schrittweise durchgehe kann ich ja mit der Maus die momentanen Werte der Variablen abfragen und sehe dass die Werte als solches richtig sein sollten...

was meinst du eigentlich mit ...wenn die Round-Function nicht gegriffen hat?
dh könnte auch bedeuten dass If nicht greift?
kann eine Funktion mal nicht greifen und der Macro geht weiter?
Wenn ich mich richtig erinnere trat der Fehler auch schon bei Werten auf bei denen es nichts zu runden gab.

Grüße

Michael


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 11:48:26
ingo
Hallo michael,

Du schreibst, dass alle x_werte auf 0,02 gerundet werden.

daraus folgt, dass die x werte auch nur diskrete zustände einnehmen können und die differenz zweier x-werte auch durch 0.02 teilbar ist.
wenn jetzt die vorraussetzungen alle zutreffen, sind beide aussagen identisch( da du ja solange x_alt erhöst, bis die abfrage zutrifft -evt muß in der if-abfrage dann auch ein Schleifenabruch erfolgen-), wenn nicht, dann greift die Abfrage auf >= auf jeden fall irgendwann während die abfrage auf = u.U. übersprungen wird.
was mich irritiert ist, dass du schreibst, die differenz nimmt irgendwann den wert 0.025 ein. das ist m.M. ein wiederspruch zu den oben genannten vorraussetzungen, und aus diesem Grund ist u.U. die Abfrage auf >= besser.

Gruß Ingo


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 12:03:21
michael
Hallo Ingo,

was mich irritiert ist, dass du schreibst, die differenz nimmt irgendwann den wert 0.025 ein:
das macht sie nur wenn ich es von Anfang an so einstelle. (keine Äderung während dem Ablauf) entweder 0,02 oder 0,025 oder andere Werte - dann wird auch 0,025 oder entsprechend gerundet.

Im Macro ist ein SchleifenZähler, da es nur eine max Anzahl Vergleiche geben kann - danach bricht die Schleife ab.

Grüße
Michael


>= geht auch nicht
24.07.2003 12:28:45
michael
Hallo Ingo,

leider funktioniert >= nicht. Es wird erst beim anschließenden Durchlauf der Abfrage über > die Bedingung erfüllt. Da dies einen Durchlauf später erfolgt wird der Eintrag wg. SchleifenZähler eine Zeile zu tief geschieben. - Schade

Ich verstehe nach wie vor nicht warum bei einer Prüfung der Werte diese richtig wiedergegeben werden nur der Vergleich dieser Werte fehlschlägt...

VG
Michael


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 02:00:33
PeterW
Hallo Michael,

die Frage läßt sich mit deiner Problembeschreibung nicht beantworten. Was ist x_alt und was x_wert? Zu welchem Wert wird 0,02 addiert? Wie sind die Variablen dimensioniert? Wie sieht dein kompletter Code aus - oder noch besser, lade eine Beispieltabelle hoch. Dann wird das Problem vielleicht deutlicher.

Gruß
Peter


AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 02:58:11
michael
Hallo Peter,

vielen Dank für deine Hilfe
Anbei findest du die xls Datei.

in Tabelle 9_1 alles ok Macro arbeitet wie es soll
In Tabelle 9_2 habe ich ich statt 8 10 Stützstellen
in tabelle 9_3 habe ich statt Delta-x 0,02 0,025
in beiden Fällen treten beim ersten durchlauf ein fehler auf !?

in 9_4: 10 stützstellen und delta-x 0,025 ist es wieder ok !?

Der fehler tritt beim Schritt für Schritt durchlauf an der Stelle
If x_alt = x_wert Then
auf, dann springt das MAcro weiter wie bei allen vorherigen falschen werten.

Danke
Michael

https://www.herber.de/bbs/user/323.xl


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 17:38:12
PeterW
Hallo Michael,

bin jetzt nicht den ganzen Code durchgegangen aber wandle die Werte der UF mal ausdrücklich in Double um:
i = CDbl(frmPeakform.TextBox2.Value)
fkt = CDbl(frmPeakform.TextBox3.Value)
Der Vergleich x_alt x_wert klappt damit so wie er soll.

Gruß
Peter


geht nicht... :-(
24.07.2003 19:59:14
michael
Hallo Peter,

ich habe die Werte und auch andere der UF explizit in CDbl umgewandelt. Jedoch ohne Erfolg die If abfrage wird mit dem selben Fehler durchlaufen....
Was mach ich oder mein PC falsch...

Hast du noch eine Idee?

Danke Michael


AW: geht nicht - gibts nicht :)
24.07.2003 20:30:56
PeterW
Hallo Michael,

frag mich nicht warum aber wenn ich die Werte in Strings wandle funktioniert es:

If CStr(x_alt) = CStr(x_wert) Then

Gruß
Peter


Anzeige
problem erkannt.....
24.07.2003 23:54:53
michael
Hallo Peter,

erst mal vielen Dank für deine Hilfe und Mühe.
Mit etwas erhöhtem Aufwand hab ich das Problem gefunden.
Ich hab die Differenz zwischen x_alt und x_wert gebildet und mit maximaler Anzahl an Nachkommastellen formatiert. Und siehe da - die gleichen Werte sind dann doch nicht so gleich. Differenz ca. 3,5 e-15. Solch ein Phänomen hatte ich schon mal in einem anderen Programm, da war 10*0,1 nicht das selbe wie 10 mal 0,1+0,1... und in der Schleife wird ja auch immer ein konstanter Wert addiert und irgendwie werden da scheinbar nicht 0,02 sondern 0,0200000000000003 oder so addiert.... Diese Ungenauigkeit mittelt sich scheinbar in einigen Fällen raus.
...übrigens könnte das ja mit String passen, da dann wohl die 15. Nachkommastelle nicht zum Tragen kommt - kann das sein?


Ich hab nun 4 Lösungen
- Ich bilde den Betrag der Differenz zw x_alt und x_wert und wenn dieser kleiner als e-10 ist dann ist die Bedingung erfüllt
- ich runde nochmal x_alt und x_wert direkt vor der If-Abfrage
- ich mache statt = in der If-Abfrage > und setze die ZeilenZahl wieder einen Wert zurück (die Werte werden wg ">" erst einen Durchlauf später wahr und somit um den Wert 1 verschoben)
- oder deine

Was empfiehlst du?

Viele Grüße

Michael


Anzeige
AW: problem erkannt.....
25.07.2003 00:23:04
PeterW
Hallo Michael,

um deine Fragen beantworten bzw. dir einen Tipp zur weiteren Vorgehensweise anbieten zu können sind vier Bedingungen nicht erfüllt.
Von der Mathematik her verstehe ich deine Problemstellung, sagen wir mal vorsichtig, nur zu etwa 10%.
Was die Genauigkeit angeht weiß ich nur, dass Excel kein Rechenprogramm mit mathematischer Genauigkeit ist, was du selber inzwischen auch festgestellt hast.
Den Code hab ich mir nur unter dem Aspekt der "fehlerhaften" If-Abfrage angeschaut.
Zwar traue ich mir zu einen brauchbaren VBA-Code für bestimmte Probleme zu schreiben und anderer User Code "lesen" zu können aber manche Excel-Interna stellen sich mir auch (noch) als Rätsel dar.

Mein Tipp kann also nur sein: teste aus, welcher Weg dein Problem am besten löst. Tendenziell würde ich mit der CStr-Variante arbeiten, werden die beiden Werte beim Debuggen doch als gleiche Werte angezeigt, nur die Gleichheitsbedingung nicht erfüllt.

Danke aber für die Rückmeldung. Sie zeigt, dass ich nicht ganz umsonst nachgedacht und probiert habe. :-)

Gruß
Peter


Anzeige
AW: wahre If-Abfrage wird manchmal als falsch gewertet
24.07.2003 03:23:54
PeterW
Hallo Michael,

das durchzugehen erfordert eine ruhige Stunde. Schaue mir das morgen an!

Gruß
Peter


Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige