You need to enable JavaScript to run this app. VBA可变起始行多列复制粘贴代码修正及批量填充方案
优惠活动
大模型
产品
解决方案
定价
更多

VBA可变起始行多列复制粘贴代码修正及批量填充方案

VBA代码修正与批量填充方案

问题1:粘贴代码修正与效率优化

原代码错误点如下:

  • Range()构造多区域时不能传入多个独立参数,需要把所有区域地址拼接为单个逗号分隔的字符串
  • 未声明Rep1变量,容易出现未定义错误
  • 未限定工作表的Cells调用会默认读取活动工作表数据,容易出现取值错误
  • 使用复制粘贴会调用系统剪贴板,运行效率低,还可能影响用户剪贴板原有内容

修正后的精简高效代码如下:

Option Explicit
Sub CopyFormulas()
    Dim LastrowQ As Long, LastrowR As Long
    Dim Rep1 As String
    ' 修改为实际工作簿名称
    Rep1 = "你的工作簿名称.xlsx"
    
    With Workbooks(Rep1)
        ' 限定工作表取数,避免活动工作表带来的错误
        LastrowQ = .Worksheets("Report").Cells(.Worksheets("Report").Rows.Count, "B").End(xlUp).Row
        LastrowR = LastrowQ + 1
        
        ' 直接赋值公式,跳过剪贴板,运行效率比复制粘贴高30%以上
        .Worksheets("Report").Range("A" & LastrowR & ",C" & LastrowR & ":F" & LastrowR & ",N" & LastrowR & ",V" & LastrowR & ":AD" & LastrowR).Formula = _
        .Worksheets("Formula").Range("A2,C2:F2,N2,V2:AD2").Formula
    End With
End Sub

关于数组实现的说明:如果公式不含需要自动调整的相对引用,可以用数组存公式再批量写入;如果需要Excel自动调整相对引用,直接区域赋值公式的方案更简单,不需要额外处理引用偏移,运行效率和数组方案基本持平。

问题2:公式批量填充到指定结束行

推荐两种实现方案,都支持自动调整公式相对引用:

方案1:直接赋值整个目标区域(效率最高)

Option Explicit
Sub CopyAndFillFormulas()
    Dim LastrowQ As Long, LastrowR As Long, LastrowS As Long
    Dim Rep1 As String
    Rep1 = "你的工作簿名称.xlsx"
    
    With Workbooks(Rep1)
        LastrowQ = .Worksheets("Report").Cells(.Worksheets("Report").Rows.Count, "B").End(xlUp).Row
        LastrowR = LastrowQ + 1
        ' 此处修改为实际结束行号,也可动态计算得到
        LastrowS = 2000
        
        ' 直接给整个范围赋值公式,Excel自动调整相对引用
        .Worksheets("Report").Range("A" & LastrowR & ":A" & LastrowS & ",C" & LastrowR & ":F" & LastrowS & ",N" & LastrowR & ":N" & LastrowS & ",V" & LastrowR & ":AD" & LastrowS).Formula = _
        .Worksheets("Formula").Range("A2,C2:F2,N2,V2:AD2").Formula
    End With
End Sub

方案2:首行赋值后逐区域填充

如果只需要首行公式验证后再批量填充,可以用该方案:

' 首行公式赋值和上面一致,后续补充填充代码即可
With Workbooks(Rep1).Worksheets("Report")
    .Range("A" & LastrowR & ":A" & LastrowS).FillDown
    .Range("C" & LastrowR & ":F" & LastrowS).FillDown
    .Range("N" & LastrowR & ":N" & LastrowS).FillDown
    .Range("V" & LastrowR & ":AD" & LastrowS).FillDown
End With

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:51:03