VBA使用For循环对Excel间隔6列区域按条件求和问题求助
问题排查与修正方案
错误点说明
SumIf参数语法错误:条件区域与求和区域为同一区域时,不需要传入第三个参数;原代码错误将单元格.Value属性值传入Range()构造参数,Range要求接收单元格对象或地址字符串,传入数值会触发类型错误。- 单元格引用未绑定工作表:
Cells对象默认引用当前激活工作表的单元格,若运行代码时激活的不是Sheet1,会导致区域引用错位,甚至触发下标越界错误。
修正后代码
Dim m As Integer, totdamage As Double Dim wsSource As Worksheet, wsCalc As Worksheet ' 提前绑定工作表,避免重复调用提升效率,也避免引用错误 Set wsSource = ThisWorkbook.Worksheets("Sheet1") Set wsCalc = ThisWorkbook.Worksheets("Calculator") For m = 1 To 20 Dim colNum As Integer colNum = 6 * m + 1 ' 列号计算逻辑保留,m=1对应G列(第7列)符合需求 ' 同区域条件求和SumIf只需传前两个参数即可 totdamage = Application.WorksheetFunction.SumIf(wsSource.Range(wsSource.Cells(19, colNum), wsSource.Cells(28, colNum)), ">0") ' 结果写入Calculator表,写入逻辑和原需求一致 wsCalc.Cells(m + 6, 31).Value = totdamage Next m
可选优化
如果需要避免源区域存在非数值内容导致代码中断,可将Application.WorksheetFunction.SumIf替换为Application.SumIf,出错时会返回错误值写入单元格,不会直接终止程序运行。
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

