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

VBA实现动态数据源到不规则表单的批量数据复制需求

批量处理动态数据并生成总计的VBA方案

完整代码

Sub sbBatchCopyRangeToForm()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastSourceRow As Long
    Dim sourceRow As Long
    Dim targetStartRow As Long
    
    ' 初始化工作表对象(避免重复引用,提升稳定性)
    Set wsSource = ThisWorkbook.Sheets("51")
    Set wsTarget = ThisWorkbook.Sheets("Add 51")
    
    ' 获取源数据最后一行(动态判断数据范围,假设表头在第1行,数据从第2行开始)
    lastSourceRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    
    ' 设置目标表单的起始行(对应你最初的D10/A11位置)
    targetStartRow = 10
    
    ' 循环遍历所有源数据行(从第2行开始,跳过表头)
    For sourceRow = 2 To lastSourceRow
        ' 单个源数据行对应目标表单的两行(targetStartRow 和 targetStartRow+1)
        ' 直接赋值替代Copy/Paste,提升效率且避免剪贴板冲突
        wsTarget.Cells(targetStartRow + 1, "A").Value = wsSource.Cells(sourceRow, "H").Value ' 源H列→目标A11(对应startRow+1)
        wsTarget.Cells(targetStartRow + 1, "B").Value = wsSource.Cells(sourceRow, "C").Value ' 源C列→目标B11
        wsTarget.Cells(targetStartRow, "D").Value = wsSource.Cells(sourceRow, "E").Value     ' 源E列→目标D10(对应startRow)
        wsTarget.Cells(targetStartRow + 1, "D").Value = wsSource.Cells(sourceRow, "F").Value ' 源F列→目标D11
        wsTarget.Cells(targetStartRow + 1, "E").Value = wsSource.Cells(sourceRow, "D").Value ' 源D列→目标E11
        wsTarget.Cells(targetStartRow + 1, "I").Value = wsSource.Cells(sourceRow, "I").Value ' 源I列→目标I11
        
        ' 目标行下移2行,准备处理下一条源数据
        targetStartRow = targetStartRow + 2
    Next sourceRow
    
    ' 添加总计行(以统计I列数值为例,可根据需求修改)
    Dim totalRow As Long
    totalRow = targetStartRow ' 总计行放在最后一条数据的下一行
    wsTarget.Cells(totalRow, "A").Value = "总计"
    ' 计算I列从第11行到最后一条数据行的总和
    wsTarget.Cells(totalRow, "I").Formula = "=SUM(I11:I" & (totalRow - 1) & ")"
End Sub

关键改进点说明

  • 工作表对象初始化:用Set定义wsSource和wsTarget,避免重复调用Sheets("xxx"),减少出错概率,代码更易维护。
  • 动态获取数据范围:通过wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row自动识别源数据的最后一行,适配每月变化的数据集。如果源数据的表头列不是A列,只需将代码中的"A"替换为源数据实际有值的列即可。
  • 循环批量处理:For sourceRow = 2 To lastSourceRow遍历所有源数据行,每次处理后将目标起始行下移2行,完美匹配"单源数据行对应双表单行"的需求。
  • 直接赋值替代复制粘贴:跳过Copy/PasteSpecial操作,直接给单元格赋值,运行速度更快,同时避免剪贴板占用冲突。
  • 自动生成总计行:在所有数据处理完成后,自动计算指定列的总和并写入总计行,可根据表单需求修改统计的列和公式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:22