使用VBA汇总文件夹下所有Excel文件

环境

  • VBA
  • 文件夹下有13个Excel,结构相同
    • 所有Excel的第1个表为"汇总"或者"目录",其他表为具体的内容
    • 所有汇总表的结构一样,从第3行开始为内容,只在A-F列有内容,但是最后一行可能会有汇总在E列

需求

  • 最终返回1个Excel
  • 将所有表的"汇总"或"目录"表上下合并成1张大表
  • 分表全部放在汇总表后面

也就是相当于从

  • n个a11111结构的表

变成

  • 1个A11111111结构的表

VBA代码

Sub Dan()
    ' 主程序
    Dim filepaths$
    Dim a, arrfile, Arr
    Dim Wkb As Workbook, Sht As Worksheet
    Dim theWkb As Workbook, theSht As Worksheet
    Dim endRow%, i%, j%
    
    Call deleteAllOthers
    filepaths = getCurFiles()
    arrfile = Split(filepaths, "|")
    Set theWkb = ThisWorkbook
    Set theSht = Sheet1
    For Each a In arrfile
        Set Wkb = Workbooks.Open(a)
        For Each Sht In Wkb.Sheets
            If Sht.Name = "目录" Or Sht.Name = "汇总" Then
                Arr = Sht.UsedRange
                With theSht
                    For i = 3 To UBound(Arr)
                        If Len(Arr(i, 1)) > 0 Then
                            endRow = .Cells(.Rows.Count, 1).End(3).Row + 1
                            For j = LBound(Arr, 2) To 6
                                .Cells(endRow, j).Value = Arr(i, j)
                            Next
                        End If
                    Next
                End With
            Else
                Sht.Copy after:=theSht
            End If
        Next
        Wkb.Close 0
    Next
End Sub

Function getCurFiles() As String()
    ' 获取当前文件夹所有文件
    Dim Folder$, Filename$, Filepath$, filepaths(), arrCount%
    Folder = "D:\OneDrive\桌面\隽悦雅苑\"
    Filename = Dir(Folder)
    While Filename <> ""
        If Filename <> ThisWorkbook.Name Then
            ReDim Preserve filepaths(0 To arrCount)
            Filepath = Folder + Filename
            filepaths(arrCount) = Filepath
            arrCount = arrCount + 1
        End If
        Filename = Dir
    Wend
    getCurFiles = Join(filepaths, "|")
End Function

Sub deleteAllOthers()
    ' 在当前工作簿删除除了汇总以外的所有其他表
    Dim Sht As Worksheet
    On Error Resume Next
    For Each Sht In ThisWorkbook.Sheets
        If Sht.Name <> Sheet1.Name Then
            Sht.Delete
        End If
    Next
    Debug.Print "All Deleted"
End Sub

Sub test()
     x = getCurFiles
     Debug.Print x
End Sub

- 完 -
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VBA是Visual Basic for Applications的缩写,是一种用于宏编程和自动化任务的编程语言。要汇总文件夹下的工作簿,可以通过编写VBA代码来实现。 首先,我们需要打开VBA编辑器。在Excel中,可以通过按下ALT + F11键来打开VBA编辑器。 接下来,在VBA编辑器的工程资源管理器窗格中,可以看到项目资源管理器的"微软Excel对象"。在该对象下找到"工作簿",右键点击该工作簿,选择"插入",然后选择"模块",即可创建一个新的VBA模块。 在新建的模块中,我们可以开始编写VBA代码。以下是一个简单的示例代码: ```vba Sub 汇总工作簿() Dim 文件夹路径 As String Dim 文件名 As String Dim 目标工作簿 As Workbook Dim 源工作簿 As Workbook 文件夹路径 = "C:\文件夹路径" '将文件夹路径替换为实际的文件夹路径 Set 目标工作簿 = ThisWorkbook '将汇总的工作簿设置为当前活动工作簿 文件名 = Dir(文件夹路径 & "\" & "*.xlsx") '查找目标文件夹下的所有xlsx文件 Do While 文件名 <> "" Set 源工作簿 = Workbooks.Open(文件夹路径 & "\" & 文件名) '打开每个工作簿 源工作簿.Sheets(1).UsedRange.Copy 目标工作簿.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) '将源工作簿的数据复制到目标工作簿的下一行 源工作簿.Close SaveChanges:=False '关闭源工作簿,不保存更改 文件名 = Dir '继续查找下一个文件 Loop MsgBox "工作簿汇总完成。" End Sub ``` 在上述代码中,我们首先声明了所需的变量,包括文件夹路径、文件名、目标工作簿和源工作簿。然后,通过使用Dir函数来查找文件夹下的所有xlsx文件。 在循环中,我们打开每个工作簿,并使用Copy方法将源工作簿的数据复制到目标工作簿的下一行。最后,关闭源工作簿。循环将继续,直到没有更多的文件需要汇总。 最后,将提示一个消息框,显示工作簿汇总完成。 希望上述示例能帮助您理解如何使用VBA汇总文件夹下的工作簿。请注意,示例中的文件夹路径需替换为实际的文件夹路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

但老师

要是看起来爽 求打赏一耳光

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

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

打赏作者

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

抵扣说明:

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

余额充值