使用excel中的VBA合并多个excel文件

需求是这样的:

在Windows下,用excel文件让多个小组填写了统计信息,现在我需要把收集的多个文件汇总到一个文件中,前三行为标题可以忽略,第四行为收集信息的列名,处理每一行数据的时候,发现某一行的第一列为空将不再复制处理本文件中下面的行。

在office的Excel中视图下面的宏中,创建一个新的宏,并命名为ConsolidateExcelFiles,

VBA 复制代码
Sub ConsolidateExcelFiles()
    Dim FolderPath As String
    Dim FileName As String
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim LastRow As Long
    Dim DestRow As Long
    Dim i As Long
    Dim fd As FileDialog
    Dim FirstFile As Boolean
    Dim HeaderRow As Long
    Dim StartRow As Long

    ' 使用文件对话框选择文件夹路径
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    fd.Title = "选择要合并的文件所在的文件夹"
    If fd.Show = -1 Then
        FolderPath = fd.SelectedItems(1) & "\"
    Else
        MsgBox "未选择文件夹,操作取消。"
        Exit Sub
    End If

    ' 询问用户列名所在的行号
    HeaderRow = Application.InputBox("请输入列名所在的行号:", Type:=1)
    If HeaderRow < 1 Then
        MsgBox "无效的行号,操作取消。"
        Exit Sub
    End If

    ' 创建一个新的工作簿用于汇总
    Set wsDest = ThisWorkbook.Sheets(1)
    DestRow = 1
    FirstFile = True

    ' 获取文件夹中的第一个文件
    FileName = Dir(FolderPath & "*.xls*")

    ' 遍历文件夹中的所有文件
    Do While FileName <> ""
        ' 打开源工作簿
        Set wbSource = Workbooks.Open(FolderPath & FileName)
        Set wsSource = wbSource.Sheets(1)

        ' 找到源工作表的最后一行
        LastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row

        ' 如果是第一个文件,复制列名
        If FirstFile Then
            wsSource.Rows(HeaderRow).Copy wsDest.Rows(DestRow)
            DestRow = DestRow + 1
            FirstFile = False
        End If

        ' 从列名行的下一行开始复制数据
        StartRow = HeaderRow + 1
        For i = StartRow To LastRow
            ' 如果第一列为空,则停止处理该文件
            If IsEmpty(wsSource.Cells(i, 1).Value) Then Exit For

            ' 复制数据到目标工作表
            wsSource.Rows(i).Copy wsDest.Rows(DestRow)
            DestRow = DestRow + 1
        Next i

        ' 关闭源工作簿
        wbSource.Close SaveChanges:=False

        ' 获取下一个文件
        FileName = Dir
    Loop

    MsgBox "汇总完成!"
End Sub

这里的VBA脚本通过文件夹选择的方式来选择要合并哪个文件夹下面的Excel文件

然后输入收集信息表中列名所在的行数:

最后合并的文件中只会记录一行列名,后面其他重复的列名将会被忽略掉:

如果需要经常使用,可以将此包含宏的Excel保存为一个xlsm格式的文件,方便后续的使用。

相关推荐
Am-Chestnuts1 小时前
AI表格复制到Excel后日期金额和编号被改写:导入与格式检查方法
excel
汉拓3D数字化4 小时前
设计标准化怎么落地?企业设计标准化的5阶段实施路径
科技·excel·系统·软件
灵析表格7 小时前
json_ObjectToKV 函数:Excel解析JSON对象的权威方案
json·excel
灵析表格8 小时前
灵析表格文本处理函数技术白皮书:WPS Excel 官方函数扩展库 18 项文本规整与正则批处理企业落地标准
ai·json·excel·wps
灵析表格1 天前
WPS Excel官方函数扩展库数据安全加密校验函数深度研究报告:Excel国密SM3/SM4加解密、MD5摘要、UUID、Base64与URL编解码全栈解析
excel·wps
AC赳赳老秦1 天前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
VBAMatrix2 天前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
AI英德西牛仔2 天前
手机文心怎么导出文档?AI 导出鸭一键解决格式崩塌与批量归档难题
人工智能·智能手机·excel·deepseek·ai导出鸭
AI导出鸭2 天前
Grok苹果版导出表格的工程化解耦方案:AI导出鸭的技术逻辑与批量实践
人工智能·excel·ai导出鸭
reasonsummer3 天前
【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)
开发语言·python·excel