VBA使用WorksheetFunction.Sum间隔3列求和结果为0如何修正
VBA间隔3列求和代码修正说明
错误原因
- 赋值逻辑错误:现有代码每次内循环都会直接覆盖目标单元格的内容,没有累加前序单元格的数值,最终单元格仅保留最后一次循环的单个单元格值,若最后一个计算单元格为0,结果就会显示为0。
- 列范围偏移错误:你需要求和的列范围是第4、7、10……48列,现有循环
i = 3 To 48 Step 3配合i+1取列,最终会取到第49列,超出你需要的最大列范围。
修正方案
方案1:逐次累加(逻辑简单,适合小数据量场景)
For j = 1 To 54 ' 初始化目标单元格值为0,避免历史数据干扰 Cells(4 + j, 54) = 0 ' 直接遍历你需要求和的列:4到48,步长3 For i = 4 To 48 Step 3 Cells(4 + j, 54) = Cells(4 + j, 54) + Cells(4 + j, i) Next i Next j
方案2:合并Range一次性求和(性能更优,自动忽略文本值)
Dim sumRng As Range For j = 1 To 54 Set sumRng = Nothing For i = 4 To 48 Step 3 ' 把所有符合要求的单元格合并为一个Range对象 If sumRng Is Nothing Then Set sumRng = Cells(4 + j, i) Else Set sumRng = Union(sumRng, Cells(4 + j, i)) End If Next i ' 调用Sum函数一次性计算 Cells(4 + j, 54) = WorksheetFunction.Sum(sumRng) Next j
内容的提问来源于stack exchange,提问作者ARSENAL COYG
相关产品推荐
相关产品推荐

