如何将多个TXT文件中的表格复制粘贴到单个Excel工作表中?
Excel批量合并与文本分列解决方案
核心需求
- 打开同一文件夹内所有目标Excel文件
- 首份文件复制第6行(表头)至数据末尾;后续文件从第7行开始复制(跳过重复表头)
- 将数据追加到主工作表,不覆盖已有内容
- 对主工作表执行逗号分隔的文本分列操作
- 关闭所有非主工作表的文件
兼容版VBA代码
以下代码适配Excel 2010及以上版本,解决兼容性报错问题:
Sub BatchMergeAndSplit() Dim mainWB As Workbook, sourceWB As Workbook Dim mainWS As Worksheet, sourceWS As Worksheet Dim folderPath As String, fileName As String Dim firstFile As Boolean Dim lastRow As Long, destLastRow As Long ' 绑定主工作簿和默认工作表 Set mainWB = ThisWorkbook Set mainWS = mainWB.Sheets(1) ' 可改为指定工作表名,如mainWB.Sheets("汇总表") ' 获取当前文件夹路径 folderPath = mainWB.Path & "\" fileName = Dir(folderPath & "*.xlsx") ' 如需兼容xls,改为"*.xls*" firstFile = True ' 遍历所有Excel文件 Do While fileName <> "" If fileName <> mainWB.Name Then ' 以只读模式打开源文件,避免锁定 Set sourceWB = Workbooks.Open(folderPath & fileName, ReadOnly:=True) Set sourceWS = sourceWB.Sheets(1) ' 可改为指定源工作表名 ' 确定复制范围 lastRow = sourceWS.Cells(sourceWS.Rows.Count, "A").End(xlUp).Row If firstFile Then sourceWS.Rows("6:" & lastRow).Copy firstFile = False Else sourceWS.Rows("7:" & lastRow).Copy End If ' 粘贴到主表末尾 destLastRow = mainWS.Cells(mainWS.Rows.Count, "A").End(xlUp).Row + 1 mainWS.Cells(destLastRow, "A").PasteSpecial xlPasteValuesAndNumberFormats ' 关闭源文件,不保存变更 sourceWB.Close SaveChanges:=False End If fileName = Dir() Loop ' 执行逗号分列 With mainWS.Range("A1").CurrentRegion .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, _ Comma:=True, TextQualifier:=xlDoubleQuote End With Application.CutCopyMode = False MsgBox "处理完成" End Sub
使用步骤
- 打开作为汇总主表的Excel文件
- 按
Alt + F11打开VBA编辑器 - 右键点击工程窗口中的主工作簿名称 → 插入 → 模块
- 粘贴上述代码到模块中
- 按
F5运行宏,或通过Excel界面「开发工具」→「宏」执行
关键提示
- 确保所有待处理文件与主文件在同一文件夹
- 若源文件数据不在第一个工作表,修改
sourceWB.Sheets(1)为具体工作表名(如sourceWB.Sheets("数据")) - 运行前备份所有文件,防止数据意外丢失
内容的提问来源于stack exchange,提问作者Mikey_Bustos
相关产品推荐
相关产品推荐

