如何调整VBA代码以适配SUMIF宏的动态单元格范围
动态调整SUMIF宏的填充范围
你之前尝试"H2:H" & lastRow出现运行时错误,核心原因是未正确定义lastRow变量,或是Range对象的拼接写法有误。以下是修正后的高效代码,同时优化了录制宏中冗余的Select操作:
方案一:直接批量写入公式(推荐)
Sub DynamicSumIf() Dim lastRow As Long ' 以A列为例获取数据最后一行,若数据在其他列,将"A"改为对应列标(如"B"、"C") lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 直接给H2到最后一行的区域批量写入SUMIF公式 Range("H2:H" & lastRow).FormulaR1C1 = "=SUMIF(RC[-5], ""10"", RC[-4])" End Sub
方案二:保留AutoFill逻辑
如果你更习惯用AutoFill的方式,可使用以下代码:
Sub DynamicSumIfWithAutoFill() Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("H2").FormulaR1C1 = "=SUMIF(RC[-5], ""10"", RC[-4])" Range("H2").AutoFill Destination:=Range("H2:H" & lastRow) End Sub
关键注意事项
- 选择获取
lastRow的列时,必须是包含连续数据的列,避免选存在空行的列,否则会得到错误的行号 - 若SUMIF的统计范围(即公式中
RC[-5]和RC[-4]对应的列)也需要动态调整,可修改公式为:
这样SUMIF的条件区域和求和区域都会随数据行数动态变化。Range("H2:H" & lastRow).FormulaR1C1 = "=SUMIF(R2C[-5]:R" & lastRow & "C[-5], ""10"", R2C[-4]:R" & lastRow & "C[-4])"
内容的提问来源于stack exchange,提问作者NiBagMo
相关产品推荐
相关产品推荐

