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

将多工作表数据合并至指定工作表的VBA宏需求

多工作表数据合并VBA解决方案

功能说明

以下代码完全匹配你的需求:

  • 每次运行先清空目标工作表第3行及以下的原有数据,避免重复
  • 仅复制源表第3行开始的有效数据(跳过表头)
  • 自动识别每个源表的最后一行数据,适配动态变化的行数
  • 将各源表数据无间隙地依次叠加到目标表中
Sub ConsolidateData()
   Dim ws As Worksheet
   Dim destSheet As Worksheet
   Dim lastRow As Long
   Dim destRow As Long
   Dim rng As Range
   Dim sourceSheets As Variant
   Dim sheetName As Variant
   
   ' 定义需要合并的源工作表名称数组
   sourceSheets = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")
   ' 指定目标工作表
   Set destSheet = ThisWorkbook.Sheets("Projects consolidated")
   ' 清空目标表第3行及以下的所有内容
   destSheet.Rows("3:" & destSheet.Rows.Count).ClearContents
   ' 初始化目标粘贴起始行
   destRow = 3
   
   ' 遍历每个源工作表
   For Each sheetName In sourceSheets
       Set ws = ThisWorkbook.Sheets(sheetName)
       ' 获取当前源表的最后一行数据行号
       lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
       ' 只有当源表存在有效数据(第3行及以下有内容)时才复制
       If lastRow > 2 Then
           ' 定义需要复制的范围(A列到Z列,第3行到最后一行)
           Set rng = ws.Range("A3:Z" & lastRow)
           ' 复制到目标表的指定位置
           rng.Copy Destination:=destSheet.Cells(destRow, 1)
           ' 更新目标表下一次粘贴的起始行
           destRow = destRow + rng.Rows.Count
       End If
   Next sheetName
End Sub

自定义提示

  • 如果你的源工作表名称不是Sheet1到Sheet5,直接修改sourceSheets数组里的名称即可
  • 代码中使用A3:Z作为固定列范围,如果实际列数不同,把Z替换成你需要的最后一列列标(比如AA、AB等)
  • 目标工作表名称Projects consolidated可根据实际情况修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:33:11