请求开发宏实现跨工作表合并同格式动态数据表格
Excel宏实现两个同格式工作表合并到新工作表
我明白你需要一个能自动合并两个格式一致的工作表到新工作表的宏,替代繁琐的手动粘贴操作——毕竟数据还会动态变化,手动弄太费时间了。下面这段VBA宏代码专门解决这个需求,我还加了详细注释和使用说明:
完整宏代码
Sub MergeTwoSheets() Dim ws1 As Worksheet, ws2 As Worksheet, wsNew As Worksheet Dim lastRow1 As Long, lastRow2 As Long, lastCol As Long Dim targetRow As Long ' 这里替换成你实际的两个工作表名称 Set ws1 = ThisWorkbook.Worksheets("Sheet1") Set ws2 = ThisWorkbook.Worksheets("Sheet2") ' 创建新工作表,命名为"合并结果"(如果已存在则先删除) On Error Resume Next Set wsNew = ThisWorkbook.Worksheets("合并结果") If Err.Number = 0 Then Application.DisplayAlerts = False wsNew.Delete Application.DisplayAlerts = True End If On Error GoTo 0 Set wsNew = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) wsNew.Name = "合并结果" ' 获取第一个工作表的最后一行和最后一列(动态适配数据变化) lastRow1 = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row lastCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column ' 复制第一个工作表的所有数据(包括表头)到新表 ws1.Range(ws1.Cells(1, 1), ws1.Cells(lastRow1, lastCol)).Copy Destination:=wsNew.Cells(1, 1) ' 获取第二个工作表的最后一行,准备复制数据(跳过表头) lastRow2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row targetRow = wsNew.Cells(wsNew.Rows.Count, 1).End(xlUp).Row + 1 ' 复制第二个工作表的数据(从第2行开始,跳过表头)到新表的下方 ws2.Range(ws2.Cells(2, 1), ws2.Cells(lastRow2, lastCol)).Copy Destination:=wsNew.Cells(targetRow, 1) ' 自动调整新表的列宽,让内容更美观 wsNew.Columns.AutoFit MsgBox "合并完成!结果已保存到「合并结果」工作表", vbInformation End Sub
使用步骤
- 打开你的Excel文件,按下
Alt + F11快速打开VBA编辑器 - 在左侧的「工程资源管理器」中,右键点击你的工作簿名称,选择「插入」→「模块」
- 将上面的宏代码粘贴到弹出的模块代码窗口中
- 关键步骤:把代码里的
Sheet1和Sheet2替换成你实际的两个工作表名称(比如你的表叫"销售数据A"和"销售数据B",就改成对应的名字) - 按下
F5运行宏,或者回到Excel界面,点击「开发工具」选项卡→「宏」,选择MergeTwoSheets后点击「执行」
代码关键说明
- 动态适配数据变化:用
End(xlUp)和End(xlToLeft)自动获取数据的最后一行和列,不管数据量怎么变都能准确抓取 - 避免重复表头:复制第二个表时从第2行开始,只复制数据部分,不会重复表头
- 处理重复工作表:如果已经存在名为「合并结果」的工作表,会先删除再新建,避免数据混乱
- 自动美化格式:最后执行
Columns.AutoFit自动调整列宽,不用手动调整
注意事项
- 确保两个源工作表的表头和列顺序完全一致,否则合并后数据会错位
- 运行宏前建议先备份你的Excel文件,避免意外情况导致数据丢失
- 如果你的数据里有合并单元格,可能需要调整代码(但不建议用合并单元格,会增加处理复杂度)
内容的提问来源于stack exchange,提问作者Jean Salazar
相关产品推荐
相关产品推荐

