HERBERS Excel-Forum - das Archiv
For-Next Schleife
Micha

Hey,
hat einer von Euch ne Ahnung, warum mir in der folgenden Prozedur eine 3,3,5,5 ausgegeben wird ? - sollte m.E. nach eine 3,4,5,6 sein.
Sub Test5()
Repetition = 0
For i = 0.03 To 0.05 Step 0.01
Repetition = Repetition + 1
Next
Cells(3, 14) = Repetition
Repetition = 0
For i = 0.03 To 0.06 Step 0.01
Repetition = Repetition + 1
Next
Cells(4, 14) = Repetition
Repetition = 0
For i = 0.03 To 0.07 Step 0.01
Repetition = Repetition + 1
Next
Cells(5, 14) = Repetition
Repetition = 0
For i = 0.03 To 0.08 Step 0.01
Repetition = Repetition + 1
Next
Cells(6, 14) = Repetition
End Sub
?
Grüße

AW: For-Next Schleife
Luschi

Hallo Micha,
wenn Du folgende 3 Anweisungen ausführst:
MsgBox 0.03 + 0.01 = 0.04
MsgBox 0.04 + 0.01 = 0.05
MsgBox 0.05 + 0.01 = 0.06
wirst Du feststellen, daß die letzte Anweisung 'Falsch' ergibt und deshalb der letzte Schritt in der Forschleife nicht mehr ausgeführt wird.
Es ist sinnvoll, als Schleifenzähler nur ganzzahlige Ausdrücke zu verwenden.
Gruß von Luschi
aus klein-Paris
AW: For-Next Schleife
Micha

Hi Luschi,
vielen Dank für die Info !!!
Grüße,
Micha :)
Schleife über Dezimalbrüche
Erich

Hi Micha,
so ein PC kann prinzipiell mit gebrochenen Dezimalzahlen oft nicht genau rechnen.
Bei der Umwandlung vom Dezimal- ins Binärsystem passieren - bei endlich vielen Stellen - zwangsläufig Ungenauigkeiten.
In deinem Beispiel führt das in zwei Fällen zum Vorzeitigen Verlassen der Schleife, weil wohl z. B. bei
For i = 0.03 To 0.06 Step 0.01
die Schleife für i=0.06 nicht mehr ausgeführt wird, weil der Schleifenzähler
mit i = i+0.01 die 0.06 überschreiten würde. Er könnte z. B. 0.06000000001 sein.
Probier mal

Sub add01()
Dim dblX As Double
For ii = 1 To 100
dblx = dblx + 0.07
Next
Cells(1, 1) = dblx
End Sub
Das Ergebnis ist nicht wie in A1 angezeigt genau 7,
sondern - siehe Bearbeitungsleiste - 7,00000000000001.
Eine Schleife, die bis 7 gehen soll, würde dann nicht mehr ausgeführt.
Fazit: Schleifen über Dezimalbrüche möglichst vermeiden!
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: Verwendest du eigentlich nicht "Option Explicit"?
AW: Schleife über Dezimalbrüche
Micha

Hi,
vielen Dank für die Info !
Dann muss ich wohl um die dezimal For..Next drumherum manövrieren :)
Option Explicit verwende ich erst zum Schluss zum überprüfen, welche Variablen ich noch deklarieren muss...
Grüße,
Micha
AW: Schleife über Dezimalbrüche
Luschi

Hallo Micha,
das sollte etwas zu spät sein, für die explicite Definition von Variablen. Wenn es dann noch ein paar 'On Error' - Anweisungen gibt, die bei vorhandenen Fehlern auf andere Verzweigungen verweisen, ist viel Programmieraufwand passiert, ohne das eigentliche Problem tatsächlich zu erfassen/behandeln.
Gruß von Luschi
aus klein-Paris
AW: Schleife über Dezimalbrüche
elMike

Hi Luschi,
Danke für den Tip !
Mal eine andere Frage - wenn ich aus einer Liste eine Pivot Tabelle erstelle, dann wird die Formatierung nur für die Zeilen-Werte, nicht aber für die Daten-Werte übernommen. Weiß hier jemand, wie ich die Formatierung der Listen-Werte für die Daten-Werte übernehme ?
Grüße