Excel 合并所有sheet使用方式

本文介绍如何使用WPS宏代码实现工作簿内所有工作表的自动合并,包括使用VC编辑器插入和运行宏代码的具体步骤。通过定义变量和循环操作,可以高效地将多个工作表的数据整合到一个名为汇总的新工作表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. WPS 在开发工具栏目找到VC编辑器,
   windows 新建一个sheet 然后在sheet上右键选择查看代码
 
2.进入代码编辑器新建模块将以下代码复制粘贴,然后运行,最后完成合并
   

Sub MergeSheets() '工作簿内合并所有工作表
    Dim sheetsCount As Long '定义 工作簿内工作表数量 赋值为 sheetCount 数据类型为 Long(长整型)
    Dim rowCount As Long '定义 汇总表行数 赋值为 rowCount 数据类型为 Long(长整型)
    Dim i As Long '定义 循环标识 赋值为 i 数据类型为 Long(长整型)
    With ThisWorkbook
        sheetsCount = .Sheets.Count '获取工作表总数量
        .Sheets.Add After:=.Sheets(.Sheets.Count) '新建一个工作簿
        .Sheets(.Sheets.Count).Name = "汇总" '设置新建工作簿名为 汇总
        For i = 1 To sheetsCount
            .Sheets(i).UsedRange.Copy '逐个循环复制表内已使用单元格区域
            With .Sheets("汇总")
                rowCount = .Range("A" & 2 ^ 20).End(xlUp).Row + 1 '粘贴前获取 汇总 表中已使用单元格行数的下一行行数
                .Range("A" & rowCount).Select '选中A列该行所在单元格
                .Paste '执行粘贴
            End With
        Next
        .Sheets("汇总").Move before:=.Sheets(1) '把汇总表移动到开头
    End With
End Sub

上述代码如果有异常,请使用下面的

Function LastRow(sh As Worksheet)
   On Error Resume Next
   LastRow = sh.Cells.Find(what:="*", _
                           After:=sh.Range("A1"), _
                           Lookat:=xlPart, _
                           LookIn:=xlFormulas, _
                           SearchOrder:=xlByRows, _
                           SearchDirection:=xlPrevious, _
                           MatchCase:=False).Row
   On Error GoTo 0
End Function
 
Sub MergeSheets()
   Dim sh As Worksheet
   Dim DestSh As Worksheet
   Dim Last As Long
   Dim shLast As Long
   Dim CopyRng As Range
   Dim StartRow As Long
 
   Application.ScreenUpdating = False
   Application.EnableEvents = False
 
   '新建一个“汇总”工作表
   Application.DisplayAlerts = False
   On Error Resume Next
   ActiveWorkbook.Worksheets("汇总").Delete
   On Error GoTo 0
   Application.DisplayAlerts = True
   Set DestSh = ActiveWorkbook.Worksheets.Add
   DestSh.Name = "汇总"
 
   '开始复制的行号,忽略表头,无表头请设置成1
   StartRow = 2
 
   For Each sh In ActiveWorkbook.Worksheets
 
       If sh.Name <> DestSh.Name Then
           Last = LastRow(DestSh)
           shLast = LastRow(sh)
 
           If shLast > 0 And shLast >= StartRow Then
 
               Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
 
               If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
                   MsgBox "内容太多放不下啦!"
                   GoTo ExitSub
               End If
 
               CopyRng.Copy
               With DestSh.Cells(Last + 1, "A")
                   .PasteSpecial xlPasteValues
                   .PasteSpecial xlPasteFormats
                   Application.CutCopyMode = False
               End With
           End If
       End If
   Next
 
ExitSub:
   Application.GoTo DestSh.Cells(1)
   DestSh.Columns.AutoFit
   Application.ScreenUpdating = True
   Application.EnableEvents = True
 
End Sub

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Garc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值