直到循环在Excel VBA中

我的循环似乎不会中断。 不知道我哪里错了。 标签“ABC”中的单元格C5 = 44.5%。 “ABC”选项卡中的单元格C4 = 32%。 我必须在第E列的32%至45%之间列出百分比。SO E9 = 32%,E10 = 33%,E22 = 45%。 我已经将单元格E9链接到单元格C4。 我的macros开始从单元格E10填充。 “ABC”选项卡中的单元格C2 = 9

我的macros继续运行,并没有停止在45%。

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 

您正在稳步增加Cells(i - 1, 5).ValueCells(i - 1, 5).Value + 0.01

所以, Cells(i - 1, 5).Value变大了。 因此,我假设这一行:

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

应该是:

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

此外,您忘记了正确设置起点。 如果我理解了这个post,那么起点应该是Range("C4").Value

舍入是不必要的,因为您正在使用>=和not = 。 所以,如果有一个完全匹配没关系。 它只需要通过Range("C5")给出的阈值。

最后,当检查运行时, Cells(i, 5).Value将始终="" (空),因为循环将只检查后将Cells(i, 5).Value设置为某个值。 因此,您需要validation行Do Until Cells(i - 1, 5).Value...之前的行

把它一起,我猜你正在寻找以下内容:

 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 

尝试这个:

 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 

拉尔夫&Pspl,

非常感谢!! 你的build议帮助和为我工作。 这是一个像我这样的新编码器的优秀论坛。 再次感谢你的帮助。

 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