VBA 合并同文件夹下多工作簿中同名工作表到 一工作簿一工作表

学习日志

批量合并excel工作簿中同名工作表,适用条件:
1、所有要汇总的工作簿在同一个文件夹中,这里以后缀为.xlsx为例;
2、需要合并的工作表名称相同(如: “sheet1”),且数据字段一样(如:A列表示序号,B列表示姓名,C列表示月工资等,本例中指定数据位于a-c列);
3、需要合并的数据所在区域起始行列一致(如:有相同的表头)

ALL IN ONE

Sub allinone()
    Dim path As String, filename As String
    Dim ws As Workbook, w As Workbook
    Dim starrow As Long, n As Long, r As Long, titlerow As Integer
    
    path = "C:\Users\Lee\Desktop\新建文件夹\全民一起VBA 提高篇\12"
    filename = Dir(path & "\*.xlsx")
    
    Set ws = Workbooks.Add
    '每次复制时开始的行数
    starrow = 1: n = 0: titlerow = 1
    Application.DisplayAlerts = False
    Do While filename <> ""
        Set w = Workbooks.Open(path & "\" & filename)
        n = n + 1
        '以下复制分表数据,第一张含表头,其他表格只复制数据区
        With w.Worksheets("sheet1")
            'xlCellTypeLastCell 可用11代替
            'Cells.SpecialCells(11).Row 包含字符的最后一个单元格所在行号
            
            r = Cells.SpecialCells(xlCellTypeLastCell).Row
            
            If n = 1 Then
                .Range("a1", "c" & r).Select
            Else
                .Range("a" & (titlerow + 1), "c" & r).Select
            End If
        End With
        Selection.Copy
        w.Close
        
        With ws.Worksheets("sheet1")
            .Range("b" & starrow).Select
            .Paste
            .Range("a" & starrow, "a" & (starrow + r - titlerow)) = Mid(filename, 1, Len(filename) - 5)
        End With
        
        '复制完后,根据B列中最后数据所在行号,重定义下次复制数据开始行号
        '.End(xlUp).Row指数据区域最后一行行号
        starrow = Range("b" & Rows.Count).End(xlUp).Row + 1
        
        filename = Dir
    Loop
    With ws.Worksheets("sheet1")
        .Range("a1", "a" & titlerow) = ""
        .Range("a" & Rows.Count).End(xlUp).value = ""
    End With
    
    Application.DisplayAlerts = True
    
    ws.SaveAs path & "\合并2.xlsx"
    
End Sub
  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
VBA,要汇总同一文件夹多个工作簿同名工作,可以按照以下步骤进行: 首先,创建一个新的工作簿作为汇总结果。可以使用以下代码创建新的工作簿: ```vba Dim summaryWorkbook As Workbook Set summaryWorkbook = Workbooks.Add ``` 接下来,获取指定文件夹的所有文件名。可以使用以下代码获取文件夹路径以及文件夹的所有文件名: ```vba Dim folderPath As String Dim fileName As String Dim folder As Object Dim file As Object folderPath = "指定的文件夹路径" Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath) For Each file In folder.Files fileName = file.Name '在此处继续编写代码 Next file ``` 然后,打开每个工作簿,并将相应的同名工作复制到汇总结果工作簿。可以使用以下代码实现: ```vba Dim sourceWorkbook As Workbook Dim sourceWorksheet As Worksheet Dim destWorksheet As Worksheet For Each file In folder.Files fileName = file.Name Set sourceWorkbook = Workbooks.Open(folderPath & "\" & fileName) For Each sourceWorksheet In sourceWorkbook.Worksheets '检查是否有同名工作 If WorksheetExists(sourceWorksheet.Name, summaryWorkbook) Then Set destWorksheet = summaryWorkbook.Worksheets(sourceWorksheet.Name) sourceWorksheet.Copy After:=destWorksheet End If Next sourceWorksheet sourceWorkbook.Close SaveChanges:=False Next file ``` 最后,在完成复制后,保存并关闭汇总结果工作簿: ```vba summaryWorkbook.SaveAs folderPath & "\汇总结果.xlsx" summaryWorkbook.Close SaveChanges:=False ``` 以上是利用VBA汇总同一文件夹多个工作簿同名工作的方法。通过遍历文件夹工作簿,打开每个工作簿并复制同名工作表到汇总结果工作簿,最后保存并关闭汇总结果工作簿
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值