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

如何修改VBA代码实现复制值而非公式并累加?

解决VBA复制值并累加的问题

方法一:改进PasteSpecial操作

你的第一段代码未明确指定仅粘贴值,默认会粘贴包括公式在内的全部内容。修改后指定Paste:=xlPasteValues,同时保留累加操作即可:

Book.Sheets(Site).Range("BE19:CN57").Copy
OtherBook.Sheets(site).Range("BE19:CN57").PasteSpecial _
    Paste:=xlPasteValues, _
    Operation:=xlPasteSpecialOperationAdd
Application.CutCopyMode = False ' 清理剪贴板,避免弹窗提示

方法二:通过数组直接计算累加(效率更高)

第二段代码未处理空值可能导致的运算错误,且直接操作Range对象不如数组高效。改用数组存储值后遍历累加:

Dim sourceVals As Variant
Dim targetVals As Variant
Dim i As Long, j As Long

' 读取源区域和目标区域的计算值(自动转为二维数组)
sourceVals = Book.Sheets(site).Range("BE19:CN57").Value
targetVals = OtherBook.Sheets(site).Range("BE19:CN57").Value

' 遍历数组完成累加,处理空值避免报错
For i = LBound(sourceVals, 1) To UBound(sourceVals, 1)
    For j = LBound(sourceVals, 2) To UBound(sourceVals, 2)
        If IsEmpty(targetVals(i, j)) Then targetVals(i, j) = 0
        If IsEmpty(sourceVals(i, j)) Then sourceVals(i, j) = 0
        targetVals(i, j) = targetVals(i, j) + sourceVals(i, j)
    Next j
Next i

' 将累加结果写回目标区域
OtherBook.Sheets(site).Range("BE19:CN57").Value = targetVals

注意事项

  • 确保变量Site和site的大小写一致(VBA默认不区分大小写,但统一写法更稳妥)
  • 如果目标区域存在空单元格,直接相加会导致错误,方法二中的空值处理可以避免这个问题
  • 数组方法适合大区域操作,比剪贴板操作更快且不会干扰用户剪贴板

内容的提问来源于stack exchange,提问作者ADAN ALEJANDRO RAMIREZ QUINTER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:35:06