2017-03-14 14 views
1

Meine Schleife scheint nicht zu brechen. Ich bin mir nicht sicher, wo ich falsch liege. Zelle C5 in Tab "ABC" = 44,5%. Zelle C4 in Tab "ABC" = 32%. Ich muss die Prozentsätze zwischen 32% und 45% in Spalte E auflisten. SO E9 = 32%, E10 = 33%, E22 = 45%. Ich habe Zelle E9 mit Zelle C4 verbunden. Mein Makro beginnt mit dem Auffüllen von Zelle E10. Zelle C2 in der Registerkarte "ABC" = 9Do Until-Schleife in Excel VBA

Mein Makro läuft weiter und hört nicht bei 45% auf.

Sheets("ABC").Select 
i = Worksheets("ABC").Range("C2").Value + 1 

Do Until Cells(i, 5).Value <= Round(Worksheets("ABC").Range("C5").Value, 0) 
    Cells(i, 5).Value = Cells(i - 1, 5).Value + 0.01 
    i = i + 1 
Loop 

End Sub 
+0

Sollte es nicht '> =' anstelle von '<=' sein? – Ralph

Antwort

1

Sie steigen stetig Cells(i - 1, 5).Value von + 0.01.

So wird Cells(i - 1, 5).Value größer. Daher gehe ich davon aus, dass die Zeile:

Do Until Cells(i, 5).Value <= Round(Worksheets("ABC").Range("C5").Value, 0) 

wirklich sein sollte:

Do Until Cells(i, 5).Value >= Round(Worksheets("ABC").Range("C5").Value, 0) 

Des Weiteren Sie vergessen, den richtigen Ausgangspunkt zu setzen. Wenn ich den Beitrag richtig verstehe, sollte der Startpunkt Range("C4").Value sein. Die Rundung ist nicht notwendig, da Sie >= und nicht = verwenden. Es ist also egal, ob es eine genaue Übereinstimmung gibt. Es muss lediglich die in Range("C5") angegebene Schwelle überschreiten.

Schließlich Cells(i, 5).Value immer ="" (leer), wenn die Prüfung durchgeführt wird, weil Ihre Schleife Cells(i, 5).Value nur nach die Prüfung auf einen bestimmten Wert eingestellt werden. Daher müssen Sie die Zeile überprüfen, bevor Do Until Cells(i - 1, 5).Value...

es bringen alle zusammen ich bin zu raten, dass Sie die folgenden suchen:

Option Explicit 

Sub tmpSO() 

Dim i As Long 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Worksheets("ABC") 
ws.Activate 
i = ws.Range("C2").Value + 1 

ws.Cells(i - 1, 5).Value2 = ws.Range("C4").Value2 
Do Until ws.Cells(i - 1, 5).Value2 >= ws.Range("C5").Value2 
    ws.Cells(i, 5).Value = ws.Cells(i - 1, 5).Value + 0.01 
    i = i + 1 
Loop 

End Sub 
+0

Dadurch wird die Schleife übersprungen und das Makro beendet. – Qbr219

0

Try this:

Sheets("ABC").Select 
i = Worksheets("ABC").Range("C2").Value + 1 

Do Until Cells(i - 1, 5).Value >= Worksheets("ABC").Range("C5").Value 
    Cells(i, 5).Value = Cells(i - 1, 5).Value + 0.01 
    i = i + 1 
Loop 
0

Ralph & PSPL,

Vielen Dank !! Ihre Vorschläge haben mir geholfen und geholfen. Dies ist ein ausgezeichnetes Forum für neue Programmierer wie mich. Danke nochmal für deine Hilfe.

For the benefit of the larger group, this is what I have finally used. 

Sheets("ABC").Select 
i = Worksheets("ABC").Range("C2").Value + 1 

Do Until Cells(i - 1, 5).Value >= Worksheets("ABC").Range("C5").Value 
    Cells(i, 5).Value = Cells(i - 1, 5).Value + 0.01 
    i = i + 1 
Loop 

End Sub