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

VBA技术求助:DATA工作表列末3单元格相乘后写入Report工作表

修正VBA代码:实现两列最后3个单元格相乘并写入Report表

首先咱们先拆解原代码里的几个关键问题:

  • 未定义/赋值lRow变量:你用到了lRow - 2但没先获取DATA工作表的最后一行行号,这会直接触发运行错误
  • 错误复用lRow到Report表:lRow是DATA表的行号,直接拿来用在Report表的单元格引用上逻辑完全不对
  • AutoFill逻辑偏离需求:原代码的AutoFill没有实现“两列最后3个单元格相乘”的核心目标,反而只是复制B列内容
  • 不必要的Activate/Select操作:这些步骤不仅拖慢代码,还容易因为工作表切换出现意外问题

修正后的完整代码

Sub CalculateAndTransferData()
    Dim wsData As Worksheet
    Dim wsReport As Worksheet
    Dim lastRowData As Long
    Dim i As Integer
    
    ' 定义工作表对象,彻底避免Activate/Select操作
    Set wsData = ThisWorkbook.Sheets("DATA")
    Set wsReport = ThisWorkbook.Sheets("Report")
    
    ' 获取DATA表数据区域的最后一行行号(这里默认用A列,你可以改成实际数据列)
    lastRowData = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    
    ' 提前检查数据量,避免行数不足时报错
    If lastRowData < 3 Then
        MsgBox "DATA表中数据不足3行,无法执行操作!"
        Exit Sub
    End If
    
    ' 1. 将DATA表A列最后3个单元格复制到Report的B9:B11
    wsData.Range("A" & lastRowData - 2 & ":A" & lastRowData).Copy
    wsReport.Range("B9").PasteSpecial Paste:=xlPasteValues ' 只粘贴值,避免格式干扰
    
    ' 2. 设置Report表的表头文本
    wsReport.Range("B8").Value = "Month"
    wsReport.Range("C8").Value = "Production Cost"
    wsReport.Range("D8").Value = "Inventory Cost"
    wsReport.Range("E8").Value = "Total Cost"
    wsReport.Range("B12").Value = "Total"
    
    ' 3. 核心逻辑:计算两列最后3个单元格的乘积(这里假设是A列和B列相乘,可按需修改列号)
    For i = 0 To 2
        wsReport.Cells(9 + i, "C").Value = wsData.Cells(lastRowData - 2 + i, "A").Value * _
                                          wsData.Cells(lastRowData - 2 + i, "B").Value
    Next i
    
    ' (可选)添加Total行的合计公式
    wsReport.Range("C12").Formula = "=SUM(C9:C11)"
    
    ' 清除剪贴板,避免后续弹出粘贴提示
    Application.CutCopyMode = False
End Sub

关键修改说明

  1. 用工作表对象替代Activate:直接绑定wsData和wsReport,不用频繁切换工作表,代码更稳定高效
  2. 准确获取数据最后一行:通过Cells(Rows.Count, "A").End(xlUp).Row精准定位DATA表的数据末尾,还加了数据量校验
  3. 实现相乘核心需求:用循环遍历最后3行数据,计算指定两列的乘积并写入Report表,完全匹配你的需求
  4. 优化复制粘贴逻辑:如果只需要数值,直接赋值比复制粘贴更高效,还能避免格式冲突
  5. 添加错误防护:提前判断数据行数,防止因数据不足导致的运行错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:07:53