VBA求和列数据时遗漏最后一个单元格的问题排查求助
问题排查与修复方案
我一眼就揪出问题所在啦!你的循环终止条件写错了,这才导致最后一个单元格总是被漏掉。
问题根源解析
你的代码里这段逻辑出了问题:
Set Rng = Range("b2", Range("b2").End(xlDown)) Counter = Rng.Count ' 后续循环写的是 For i = 2 To Counter
举个实际例子:如果B2到B4有三个数值(1、2、3),Counter会等于3,循环就变成For i=2 To 3——也就是只遍历B2和B3,完全没碰B4!因为Counter是区域内的单元格总数,而不是最后一个单元格的行号,直接拿它当循环终止行号肯定不对。
修复方案(两种可选)
方案1:修正循环终止条件
把循环的终止值改成「起始行 + 单元格总数 - 1」,这样就能覆盖所有目标单元格了:
Option Explicit ' 强制变量声明,推荐加在模块最开头 Sub add() Dim Rng As Range Dim a As Integer, Counter As Integer, i As Integer ' 声明所有变量 Set Rng = Range("b2", Range("b2").End(xlDown)) Counter = Rng.Count a = 0 ' 修复:终止行是起始行2 + 总数Counter -1 For i = 2 To 2 + Counter - 1 a = a + Cells(i, "B").Value Next i ' 建议明确指定结果单元格,避免依赖ActiveCell Range("C2").Value = a ' 这里可以改成你需要的目标单元格 End Sub
方案2:用For Each遍历区域(更简洁不易错)
直接遍历选中的Rng区域里的每个单元格,完全不用手动计算行号,从根源避免行号类错误:
Option Explicit Sub add() Dim Rng As Range Dim a As Integer Dim cell As Range Set Rng = Range("b2", Range("b2").End(xlDown)) a = 0 ' 遍历区域内的每个单元格 For Each cell In Rng a = a + cell.Value Next cell Range("C2").Value = a End Sub
额外优化建议
其实VBA内置了现成的求和函数,一行代码就能搞定,根本不用写循环:
Option Explicit Sub add() Dim Rng As Range Set Rng = Range("b2", Range("b2").End(xlDown)) Range("C2").Value = WorksheetFunction.Sum(Rng) End Sub
这个方法不仅高效,还能避免手动循环可能出现的各种小疏漏~
内容的提问来源于stack exchange,提问作者khurram Shahzad
相关产品推荐
相关产品推荐

