关灯

[Excel] excel怎么快速合并多个工作表数据到一个工作表

[复制链接] [查看百度是否已收录此帖]
菜鸟站长联盟 发表于 2021-4-25 11:32:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 

本帖子中包含更多资源!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本例介绍如何在excel里利用VBA代码快速将同一工作簿中的多个工作表数据合并到一个工作表中,方便查找和汇总。

在原始数据同目录下新建一个工作簿,建立两个工作表,名称分别为“首页”和“合并汇总表”。

按Alt+F11进入VBA代码编辑和调试界面。

在“首页”下,插入一个模块。将下述代码粘贴到模块里面:

Sub CombineSheetsCells()

    Dim wsNewWorksheet As Worksheet

    Dim cel As Range

    Dim DataSource, RowTitle, ColumnTitle, SourceDataRows, SourceDataColumns As Variant

    Dim TitleRow, TitleColumn As Range

    Dim Num As Integer

    Dim DataRows As Long

    DataRows = 1

    Dim TitleArr()

    Dim Choice

    Dim MyName$, MyFileName$, ActiveSheetName$, AddressAll$, AddressRow$, AddressColumn$, FileDir$, DataSheet$, myDelimiter$

    Dim n, i

    n = 1

    i = 1

    Application.DisplayAlerts = False

    Worksheets("合并汇总表").Delete

    Set wsNewWorksheet = Worksheets.Add(, after:=Worksheets(Worksheets.Count))

    wsNewWorksheet.Name = "合并汇总表"

    MyFileName = Application.GetOpenFilename("Excel工作薄 (*.xls*),*.xls*")

    If MyFileName = "False" Then

        MsgBox "没有选择文件!请重新选择一个被合并文件!", vbInformation, "取消"

    Else

        Workbooks.Open Filename:=MyFileName

        Num = ActiveWorkbook.Sheets.Count

        MyName = ActiveWorkbook.Name

        Set DataSource = Application.InputBox(prompt:="请选择要合并的数据区域:", Type:=8)

        AddressAll = DataSource.Address

        ActiveWorkbook.ActiveSheet.Range(AddressAll).Select

        SourceDataRows = Selection.Rows.Count

        SourceDataColumns = Selection.Columns.Count

        Application.ScreenUpdating = False

        Application.EnableEvents = False

        For i = 1 To Num

            ActiveWorkbook.Sheets(i).Activate

            ActiveWorkbook.Sheets(i).Range(AddressAll).Select

            Selection.Copy

            ActiveSheetName = ActiveWorkbook.ActiveSheet.Name

            Workbooks(ThisWorkbook.Name).Activate

            ActiveWorkbook.Sheets("合并汇总表").Select

            ActiveWorkbook.Sheets("合并汇总表").Range("A" & DataRows).Value = ActiveSheetName

            ActiveWorkbook.Sheets("合并汇总表").Range(Cells(DataRows, 2), Cells(DataRows, 2)).Select

            Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _

                                   SkipBlanks:=False, Transpose:=False

            Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

                                                                                     False, Transpose:=False

            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

                                                                            :=False, Transpose:=False

            DataRows = DataRows + SourceDataRows

            Workbooks(MyName).Activate

        Next i

        Application.ScreenUpdating = True

        Application.EnableEvents = True

    End If

    Workbooks(MyName).Close

End Sub

在“首页”工作表中插入一个窗体控件并指定宏为插入的代码名称。

点击“首页”工作表中插入的按钮,根据提示,浏览到原始数据工作簿。

下一步,用鼠标选择要合并的数据范围。

注意:每个工作表数据可能不一样,比如说有的是10行数据,有的是30行数据。在这里我们可以用鼠标选择任意工作表的一个较大范围,比如说A1:D100,保证比最多行数的工作表数据还多就可以,一会再删除空行。

点击确定按钮,待代码运行完毕后,所有的数据就都合并到了“合并汇总表”中。


上一篇:在Excel中的单元格值更改时运行宏
下一篇:Excel VBA 一键汇总多个sheet数据到总表
零基础学习网站建设,上菜鸟站长联盟就够了!你与成功只差添加一个好友:微信18298346873
 
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

7关注

2粉丝

5324帖子

排行榜

QQ| 百度统计|账号封禁|李海博客 ( 陇ICP备15000550号-2 )|

GMT+8, 2021-5-13 17:52 , Processed in 0.107057 second(s), 32 queries .

快速回复 返回顶部 返回列表