如何用VBA Do Loop实现单元格累加超40后停止并统计单元格数量
VBA Do Loop实现单元格累加阈值停止计数方案
原有代码问题
你提供的参考代码逻辑存在错误:内层For循环会一次性完成D1~D10全量单元格的累加,再判断Do循环的停止条件,完全无法实现「累加和超过40立即停止」的需求,无需嵌套两层循环,直接通过Do Loop遍历单元格即可。
正确实现代码
先判断后执行版本(Do While ... Loop)
Sub CountCellsWhenSumOver40() Dim sumVal As Integer Dim i As Integer Dim count As Integer ' 初始化变量 sumVal = 0 i = 1 count = 0 ' 遍历D列1~10行,累加超过40或遍历完10个单元格即停止 Do While i <= 10 And sumVal <= 40 sumVal = sumVal + Cells(i, 4).Value count = count + 1 i = i + 1 Loop ' 输出参与累加的单元格数量 MsgBox "参与累加的单元格数量为:" & count End Sub
先执行后判断版本(Do ... Loop While)
如果需求要求必须先累加一次再做阈值判断,可以用该写法,核心逻辑和上方一致,仅判断时机后置:
Sub CountCellsWhenSumOver40() Dim sumVal As Integer Dim i As Integer Dim count As Integer sumVal = 0 i = 1 count = 0 Do sumVal = sumVal + Cells(i, 4).Value count = count + 1 i = i + 1 Loop While i <= 10 And sumVal <= 40 MsgBox "参与累加的单元格数量为:" & count End Sub
逻辑说明
- 变量
sumVal存储累加和,i为行号计数器,count统计参与累加的单元格数量 - Do循环的判断条件同时限制两个停止触发逻辑:遍历完D1~D10所有单元格、累加和超过40,任意条件满足就停止循环
- 循环内每累加一个单元格就同步更新计数和行号,最终输出的
count就是符合要求的单元格数量
内容的提问来源于stack exchange,提问作者Homar
相关产品推荐
相关产品推荐

