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

If-Abfrage zieht nicht

If-Abfrage zieht nicht
21.02.2008 13:20:17
Olaf
Hallo Zusammen,
ich habe folgendes Problem mit einer if-Abfrage:
Obwohl LC gleich dem Wert aus Cells(Ez + Az, Es + 2).Value ist, wird die MsgBox angesprochen. Ich habe beide Werte mit 10000000 multipliziert, aber keine Unterschiede feststellen können. Komisch ist auch, dass dieser "Fehler" nicht immer reproduziert werden kann, sprich bei anderen Eingangswerten bei denen die Werte von LC und Cells(Ez + Az, Es + 2).Value gleich sind, wird die if-Abfrage korrekt behandelt.
Ich hoffe eine(r) von Euch kann mir helfen. Danke.
Auszug aus dem Listing:
Sub WindlastenBerechnen()
'Variablen deklarieren
Dim Ez As Long 'Erste Zeile
Dim Lz As Long 'Letzte Zeile
Dim Az As Long 'Anzahl Zeilen
Dim Es As Long 'Erste Spalte
Dim LaengeWindA As Double 'Länge Windbereich A
Dim LaengeWindB As Double 'Länge Windbereich B
Dim LaengeWindC As Double 'Länge Windbereich C
Dim LA As Double 'absolute Länge Bereich A
Dim LB As Double 'absolute Länge Bereich A+B
Dim LC As Double 'absolute Länge Bereich A+B+C
'Werte einlesen
LaengeWindA = Range("d8").Value
LaengeWindB = Range("d9").Value
LaengeWindC = Range("d10").Value
'Positionen der ersten und letzten Zelle bestimmen
Ez = Range("Start").Row
Es = Range("start").Column
Lz = Cells(Rows.Count, Range("Start").Column).End(xlUp).Row
'Hilfswerte berechnen
Az = Lz - Ez
LA = LaengeWindA
LB = LA + LaengeWindB
LC = LB + LaengeWindC
'Meldung ausgeben wenn Gesamtmaß größer ist als Länge Bereich A-C
'hier passiert das ungewöhnliche!!
If Cells(Ez + Az, Es + 2).Value LC Then
MsgBox ("Bitte Eingaben überprüfen:" & vbLf & "Gesamtmaß stimmt nicht mit den Bereichen A-C überein!")
End If

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If-Abfrage zieht nicht
21.02.2008 13:33:23
Nepumuk
Hallo Olaf,
bau mal folgende Zeile vor der Abfrage ein:
MsgBox VarType(Cells(Ez + Az, Es + 2).Value)
Welchen Wert spuckt die Msgbox aus?
Gruß
Nepumuk

AW: If-Abfrage zieht nicht
21.02.2008 13:38:00
Olaf
Hallo Nepumuk,
als VarType wird 5 ausgegeben.
Gruß
Olaf

AW: If-Abfrage zieht nicht
21.02.2008 13:42:11
Nepumuk
Hallo Olaf,
hat die Abfrage geklappt, oder kam dabei auch die Msgbox falsch? Wenn ja, dann soltest du mal die Mappe hochladen, damit ich das ganze 1:1 nachvollziehen kann.
Gruß
Nepumuk

AW: If-Abfrage zieht nicht
21.02.2008 13:53:44
Olaf
Hallo Nepumuk,
hat auch nicht funktioniert. Habe die Datei hochgelden.
https://www.herber.de/bbs/user/50079.xls
Danke schon im voraus.
Olaf

Anzeige
AW: If-Abfrage zieht nicht
21.02.2008 14:07:07
mpb
Hallo Olaf,
MsgBox Cells(Ez + Az, Es + 2).Value - LC
zeigt eine Differenz von ca. 1,77*10^-15, die Werte sind also tatsächlich ungleich.
Gruß
Martin

AW: If-Abfrage zieht nicht
21.02.2008 14:45:34
Nepumuk
Hallo Martin,
soweit war ich auch schon. Ich komm aber einfach nicht dahinter, wo diese Differenz herkommt. Selbst wenn ich alle Zahlen in der Tabelle nochmal per Hand eingebe, bleibt die Differenz. Hast du eine Ahnung?
Gruß
Nepumuk

AW: If-Abfrage zieht nicht
21.02.2008 17:29:00
mpb
Hallo Nepumuk,
das wurde hier im Forum schon einmal diskutiert, siehe https://www.herber.de/forum/archiv/748to752/t748527.htm
Es wird u.a. auf diese Fundstelle hingewiesen;
http://de.wikipedia.org/wiki/Gleitkommazahl#Eigenschaften_von_Gleitkommaarithmetik
wo es u.a. heißt:
" Dezimalzahlen: ]Schon einfache Dezimalzahlen, z. B. 0,1, können nicht mehr exakt als binäre Gleitkommazahlen dargestellt werden, da viele im Dezimalsystem abbrechende Kommazahlen im Binärsystem nicht abbrechende, periodische Zahlen sind; von diesen werden nur die ersten p Ziffern gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… In einem binären Gleitkommasystem ist also 10 • 0,1 < 1, da die 0,1 abgerundet wird und nicht den exakten Wert approximiert."
Es handelt sich also um ein grundlegendes Problem von Gleitkommazahlen. Als Lösungsansatz fiele mir nur ein, vor der If-Bedingung auf z.B. 10 Nachkommastellen zu runden.
Gruß
Martin

Anzeige
AW: If-Abfrage zieht nicht
22.02.2008 08:12:57
Olaf
Hallo Nepumuk,
hallo Martin,
vielen Dank für die Hilfe. Hab die Datei geändert und jetzt funktioniert es wie gewollt. Werde wohl in Zukunft die entsprechenden Zahlen runden.
Nochmals Danke.
Gruß
Olaf

AW: If-Abfrage zieht nicht
21.02.2008 16:32:00
Renee
Hi Olaf & Max,
Wieso diese Ungenauigkeiten entstehen kann ich mir auch nicht erklären.
Auf alle Fälle scheint, dass bei der ganzen Rumschieberei von Daten Genauigkeit verloren geht.
Wenn dieser Bereich im Code so abgeändert wird, bleibt die Genauigkeit erhalten:

'Hilfswerte berechnen
Az = Lz - Ez
LA = LaengeWindA
LB = LaengeWindA + LaengeWindB
LC = LaengeWindA + LaengeWindB + LaengeWindC


GreetZ Renée

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige