ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1607|回复: 7

怎么把100多个EXCEL文件合并成一个

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-4-30 10:06 | 显示全部楼层 |阅读模式
老师们好,我在百度上搜到一个宏的代码拿去试,发现数据一多的时候,合并后对比少了很多。我又不知道哪里出错。我就想是不是把下面这个B65536改为100000 大点就可以,但是改完出问题。

.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)

For G = 1 To Sheets.Count

Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)



Sub 合并当前目录下所有工作簿的全部工作表()

Dim MyPath, MyName, AWbName

Dim Wb As Workbook, WbN As String

Dim G As Long

Dim Num As Long

Dim BOX As String

Application.ScreenUpdating = False

MyPath = ActiveWorkbook.Path

MyName = Dir(MyPath & "\" & "*.xls")

AWbName = ActiveWorkbook.Name

Num = 0

Do While MyName <> ""

If MyName <> AWbName Then

Set Wb = Workbooks.Open(MyPath & "\" & MyName)

Num = Num + 1

With Workbooks(1).ActiveSheet

.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)

For G = 1 To Sheets.Count

Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)

Next

WbN = WbN & Chr(13) & Wb.Name

Wb.Close False

End With

End If

MyName = Dir

Loop

Range("B1").Select

Application.ScreenUpdating = True

MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"

End Sub



TA的精华主题

TA的得分主题

发表于 2021-4-30 13:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
,这个65536是指EXCEL行数量,不是指你标题中的文件数量。批量合并EXCEL文件功能 可以在网上搜相关的插件如: 方方格子、    SOSO工具     等都有。

TA的精华主题

TA的得分主题

发表于 2021-4-30 14:14 | 显示全部楼层
上传附件才好测试代码的

TA的精华主题

TA的得分主题

发表于 2021-4-30 16:31 | 显示全部楼层
可能确实是你的数据太多了,
如果把代码存在一个.xlsm的文件里,再改65536为100000会不会好一点?

TA的精华主题

TA的得分主题

发表于 2021-4-30 18:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-5-1 16:26 | 显示全部楼层
本帖最后由 yakei 于 2021-5-2 10:20 编辑
  1. <p><p>Private Sub 复制工作表_Click()</p><p>Dim wb As Workbook, sh As Worksheet        '定义 wb 为工作薄,sh 为工作表
  2. Application.ScreenUpdating = False              '使Excel停止刷新,这样可以提高代码的执行速度
  3.     sPath = "D:\文件"                                   '打开指定文件夹
  4.     sFile = Dir(sPath & "\*.xls*")                    '打开所有后缀为.xls*的文件
  5.     Do While sFile <> ""                                '开始循环
  6.         If sFile <> ThisWorkbook.Name Then Workbooks.Open (sPath & "" & sFile)
  7.         sFile = Dir
  8.         Loop                                                    '循环结束
  9.         With ThisWorkbook.Sheets
  10.             For Each wb In Workbooks                 '历遍所有工作簿
  11.                 If wb.Name <> ThisWorkbook.Name Then              '排除本工作簿
  12.                     For Each sh In wb.Sheets                                   '逐表
  13.                         sh.Copy after:=.Item(.Count)                          '复制到本工作簿最右边
  14.                     Next
  15.                 End If
  16.             Next
  17.             .Item(1).Activate                                                        '激活本工作簿第一表
  18.         End With
  19.         For Each wb In Application.Workbooks                              '关闭本工作簿以外所有工作簿
  20.             If wb.Name <> ThisWorkbook.Name Then wb.Saved = True: wb.Close False
  21.         Next</p><p>Application.ScreenUpdating = True
  22. End Sub</p></p>
复制代码

试试这个

TA的精华主题

TA的得分主题

发表于 2023-3-23 14:49 | 显示全部楼层
本帖最后由 熊文来 于 2023-3-30 20:17 编辑

如果是多个工作簿,每个工作簿里有多张工作表,主要是合并其中某一个工作表,例如都是sheet1这个工作表,这个工作表的标头有多行,工作表里的数据不规律。能帮忙看看吗?

每个工作簿的最后一行合计和备注不同合并到总得工作簿里面。

谢谢您帮我看看。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 07:25 , Processed in 0.034108 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表