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

Excel VBA报错:计算每行指定区域最值时触发运行时错误'1004'

解决Excel VBA Runtime Error 1004的问题

嘿,我来帮你搞定这个VBA报错的问题~你遇到的1004错误,核心原因是Range对象的地址写法错误,另外还有两处可以优化的地方,我给你拆解一下:

错误原因分析

  1. 无效的Range地址拼接
    你写的.Range("BU1:BU1 +(LastRow)")是把变量LastRow直接嵌在字符串里,VBA会把整个BU1 +(LastRow)当成纯文本地址,这显然不是合法的单元格范围,自然触发1004错误。正确的做法是用字符串连接符&把固定列标和变量值拼接起来。

  2. LastRow获取的可靠性问题
    用.Range("A1").End(xlDown).Row如果A列中间有空行,会错误地把空行上方的行当成最后一行,建议改成从列A的底部往上找,这样能准确获取真正的最后一行数据。

  3. BV列范围过于宽泛
    .Range("BV1:BV1048576")会填充整个BV列,既浪费性能,还可能覆盖原有数据,应该和BU列一样限制到LastRow。

修正后的完整代码

With ThisWorkbook.Sheets("API-VAL")
    ' 更可靠的LastRow获取方式:从A列最后一行往上找
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    
    ' 正确拼接Range地址,填充Max公式
    .Range("BU1:BU" & LastRow).Formula = "=MAX(BD1:BS1)"
    
    ' 同样限制BV列范围到LastRow,填充Min公式
    .Range("BV1:BV" & LastRow).Formula = "=MIN(BD1:BS1)"
End With

额外提示

  • 注意函数名的大小写:VBA里Max和Min其实不区分大小写,但写成MAX和MIN更符合Excel公式的常规写法,避免混淆。
  • 如果你的数据是从第2行开始(第1行是表头),记得把公式的起始行改成BU2:BU" & LastRow和BV2:BV" & LastRow,对应的公式改成=MAX(BD2:BS2)和=MIN(BD2:BS2)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:58:59