Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

For-Next Schleife | Herbers Excel-Forum


Betrifft: For-Next Schleife von: Micha
Geschrieben am: 12.11.2009 11:09:16

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

  

Betrifft: AW: For-Next Schleife von: Luschi
Geschrieben am: 12.11.2009 11:29:23

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


  

Betrifft: AW: For-Next Schleife von: Micha
Geschrieben am: 12.11.2009 12:02:47

Hi Luschi,

vielen Dank für die Info !!!


Grüße,
Micha :)


  

Betrifft: Schleife über Dezimalbrüche von: Erich G.
Geschrieben am: 12.11.2009 11:29:58

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"?


  

Betrifft: AW: Schleife über Dezimalbrüche von: Micha
Geschrieben am: 12.11.2009 12:01:47

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


  

Betrifft: AW: Schleife über Dezimalbrüche von: Luschi
Geschrieben am: 12.11.2009 13:50:59

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


  

Betrifft: AW: Schleife über Dezimalbrüche von: elMike
Geschrieben am: 12.11.2009 17:59:24

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


Beiträge aus den Excel-Beispielen zum Thema "For-Next Schleife"