VBA实现将所有数据表中的内容合并到一张新的数据表中

Attribute VB_Name = "NewMacros"
Option Explicit
Public Const Const_OutSheetName As String = "VBA汇总"

Sub 汇总V2()
Attribute 汇总V2.VB_Description = "宏由 LiuZW 录制,时间: 2023/08/19"
Attribute 汇总V2.VB_ProcData.VB_Invoke_Func = " 14"
'
' 汇总 Macro
' 宏由 LiuZW 录制,时间: 2023/08/19

    Dim i As Integer
       
    
    '判断是否已有“VBA汇总”数据表
    For i = 1 To Worksheets.Count
        If Worksheets(i).name = Const_OutSheetName Then
            MsgBox ("要生成的数据表“" + Const_OutSheetName + "”存在同名数据表,请修改或删除同名数据表后重试。")
            Exit Sub
        End If
    Next
    
    '选中第一个数据表,以使得生成的汇总表在最前面,便于查阅
    Application.Worksheets(1).Activate
    
    '创建“VBA汇总”数据表
    Sheets.Add
    ActiveSheet.name = Const_OutSheetName
    Columns("A:A").Select
    Selection.NumberFormatLocal = "@"
    
      
    '复制各个数据表的数据并粘贴到汇总表
    For i = 1 To Worksheets.Count
        Dim mSheetName As String
        mSheetName = Worksheets(i).name
        
        '如果当前数据表不是 无需汇总的数据表,就执行汇总
        If Worksheets(i).name <> Const_OutSheetName Then
        
            '执行复制和粘贴
            Application.Worksheets(mSheetName).Activate
            Dim mUsedRowCount, mUsedColumnCount As Integer
            mUsedRowCount = ActiveSheet.UsedRange.Rows.Count
            mUsedColumnCount = ActiveSheet.UsedRange.Columns.Count
            Application.Worksheets(mSheetName).Range(Cells(1, 1), Cells(mUsedRowCount, mUsedColumnCount)).Select
            Selection.Copy
            
            '判断要粘贴的位置并粘贴
            Application.Worksheets(Const_OutSheetName).Activate
            Dim usableRowCount As Integer
            usableRowCount = Application.Application.Sheets(Const_OutSheetName).Range("b65536").End(xlUp).Row + 2
            Application.Worksheets(Const_OutSheetName).Cells(usableRowCount, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False
            
            '填充第一列
            Dim k As Integer
            For k = 0 To mUsedRowCount
                Application.Worksheets(Const_OutSheetName).Cells(usableRowCount + k, 1).Value = mSheetName
            Next
            
        End If
    Next
    
    MsgBox ("数据表内容汇总已完成,请在最左侧 《VBA汇总》 数据表中查阅汇总数据。")
End Sub

在Excel VBA中,如果你想把不同工作簿的所有工作合并到一个工作簿中的指定工作,可以使用`Worksheets.Add`和`Range.Copy`方法。下面是一个基本的示例,假设你想合并名为"Sheet1"的所有工作簿,并将它们添加到当前工作簿的最后一个工作之后: ```vba Sub MergeAllSheetsFromOtherWorkbooks() Dim wbTarget As Workbook Dim wbSource As Workbook Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim lastRow As Long '设置目标工作簿和工作 Set wbTarget = ThisWorkbook '当前工作簿 Set wsTarget = wbTarget.Worksheets.Add(After:=wbTarget.Worksheets(wbTarget.Worksheets.Count)) '新建一个工作作为目标 '遍历所有打开的工作簿 For Each wbSource In Application.Workbooks If wbSource.Name <> ThisWorkbook.Name Then '排除当前工作簿 For Each wsSource In wbSource.Worksheets '遍历每个工作簿的每个工作 If wsSource.Name = "Sheet1" Then '只考虑名称为"Sheet1"的工作 '获取源工作的最后一行 lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row '复制数据到目标工作 wsTarget.Range("A" & wsTarget.Cells.Count).End(xlUp).Offset(1).Resize(lastRow, wsSource.Columns.Count).Value = wsSource.Range("A1").CurrentRegion.Value End If Next wsSource End If Next wbSource MsgBox "所有工作簿的Sheet1已合并至当前工作簿的最新工作", vbInformation End Sub ``` 运行此宏后,所有符合条件的工作簿的Sheet1会被合并新的工作中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值