You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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]对应的列)也需要动态调整,可修改公式为:
    Range("H2:H" & lastRow).FormulaR1C1 = "=SUMIF(R2C[-5]:R" & lastRow & "C[-5], ""10"", R2C[-4]:R" & lastRow & "C[-4])"
    
    这样SUMIF的条件区域和求和区域都会随数据行数动态变化。

内容的提问来源于stack exchange,提问作者NiBagMo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:57:10