You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用VBA代码批量打开指定目录Excel文件并合并指定单元格区域

解决方案:批量读取Excel文件并汇总指定区域内容

没问题,我帮你写一段实用的VBA代码,能自动遍历指定文件夹里的目标Excel文件,把每个文件的A2:BX20区域复制到汇总工作表里,而且会按顺序往下粘贴,不会覆盖之前的内容。

完整VBA代码

Sub 批量汇总Excel数据()
    Dim 源文件夹路径 As String
    Dim 文件名 As String
    Dim 源工作簿 As Workbook
    Dim 汇总工作表 As Worksheet
    Dim 下一个空行 As Long
    
    ' 设置源文件夹路径(根据你的实际路径修改)
    源文件夹路径 = "C:\Desktop\"
    ' 确保路径末尾有反斜杠
    If Right(源文件夹路径, 1) <> "\" Then 源文件夹路径 = 源文件夹路径 & "\"
    
    ' 检查当前工作簿是否有"汇总表",没有则新建
    On Error Resume Next
    Set 汇总工作表 = ThisWorkbook.Worksheets("汇总表")
    On Error GoTo 0
    If 汇总工作表 Is Nothing Then
        Set 汇总工作表 = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        汇总工作表.Name = "汇总表"
    End If
    
    ' 遍历文件夹里的所有Excel文件
    文件名 = Dir(源文件夹路径 & "*.xlsx") ' 如果是xls格式,改成"*.xls"
    Do While 文件名 <> ""
        ' 打开源工作簿(只读模式,避免锁定文件)
        Set 源工作簿 = Workbooks.Open(Filename:=源文件夹路径 & 文件名, ReadOnly:=True)
        
        ' 找到汇总表的下一个空行
        下一个空行 = 汇总工作表.Cells(汇总工作表.Rows.Count, "A").End(xlUp).Row + 1
        
        ' 复制源文件的A2:BX20区域到汇总表的对应位置
        源工作簿.Worksheets(1).Range("A2:BX20").Copy _
            Destination:=汇总工作表.Range("A" & 下一个空行)
        
        ' 关闭源工作簿,不保存任何修改
        源工作簿.Close SaveChanges:=False
        
        ' 继续找下一个文件
        文件名 = Dir
    Loop
    
    MsgBox "汇总完成!所有数据已整理到「汇总表」中。", vbInformation
End Sub

关键细节说明

  • 文件夹路径设置:代码里的源文件夹路径已经设为你指定的C:\Desktop\,如果后续路径变动,直接修改这个字符串即可。代码已经做了自动补全路径末尾反斜杠的处理,不用手动纠结格式。
  • 汇总表自动创建:代码会自动检查当前运行宏的工作簿里是否有「汇总表」,如果没有就新建一个,不用担心找不到目标工作表的问题。
  • 只读打开源文件:用ReadOnly:=True打开源文件,既避免了文件被占用导致的报错,也不会意外修改源文件的原始内容。
  • 自动定位空行:每次粘贴都会找到汇总表A列最后一个有内容的行,然后往下一行粘贴,保证数据不会重叠覆盖。
  • 格式兼容:如果你的源文件是.xls格式(旧版Excel),记得把代码里的*.xlsx改成*.xls

使用步骤

  1. 打开一个新的Excel工作簿(这个工作簿就是用来存放汇总数据的载体)。
  2. 按下Alt + F11打开VBA编辑器。
  3. 在左侧的「工程资源管理器」里,右键点击当前工作簿,选择「插入」→「模块」。
  4. 把上面的代码粘贴到模块窗口里。
  5. 按下F5运行宏,或者回到Excel界面,点击「开发工具」→「宏」,选择「批量汇总Excel数据」执行即可。

如果运行过程中遇到报错,大概率是文件夹路径不对,或者源文件里的第一个工作表没有A2:BX20区域(不过只要源文件结构符合你的描述,就不会有问题)。

内容的提问来源于stack exchange,提问作者Ali S

火山引擎 最新活动