直到循环在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).Value
。 Cells(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