ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 合并工具

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-16 11:04 | 显示全部楼层 |阅读模式
两个功能:

1、合并多薄一表为一薄多表
2、合并多薄多表为一薄多表
简述:

一、合并多薄一表为一薄多表:
1、适合合并一个文件夹内的多个工作簿到一个工作簿内,
2、默认合并文件夹下的每个工作簿的第一个工作表
3、合并后的工作表名称用原工作薄名称命名
4、合并后自动建立目录并自动建立超链接

二、合并多薄多表为一薄多表:
1、适合合并一个文件夹下的多个工作簿到一个工作簿内
2、文件夹下的每个工作簿有多个工作表,并且,所有工作簿的工作表名称是一致的
3、合并后,把每个工作簿内相同名称的工作表内的数据合并到一个工作表内。
4、合并后自动建立目录并自动建立超链接
欢迎提出意见和建议,不喜勿喷
合并工具.rar (136.77 KB, 下载次数: 741)

评分

13

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-21 17:37 | 显示全部楼层
多薄多表合并中,增加了在A列写入原文件名称功能,
合并工具.rar (138.17 KB, 下载次数: 379)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-20 21:42 | 显示全部楼层
1、增加了一个功能:多薄一表合并为一薄一表功能
2、解决了合并多薄多表为一薄多表时出错的问题,
欢迎下载使用,发现问题希望积极反馈
合并工具.rar (40.8 KB, 下载次数: 168)

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-23 20:26 | 显示全部楼层
合并工具.rar (35.08 KB, 下载次数: 172)
增加了一个功能:一薄多表合并为一个工作表
image.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-7 11:38 | 显示全部楼层
修正了两个小问题,需要请在此楼下载
合并工具.rar (47.88 KB, 下载次数: 571)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-16 11:05 | 显示全部楼层
Sub 合并多薄一表为一薄多表()
Application.ScreenUpdating = False
Dim ww As Workbook
Dim sh As Worksheet
Dim arr(), brr()
Dim wb As Workbook
Dim dlgOpen As FileDialog
Set ww = ThisWorkbook
Set sht = ww.Worksheets("目录")
sht.[a1].CurrentRegion.Offset(1) = Empty
lj = ThisWorkbook.Path
VBA.ChDir lj
Set dlgOpen = Application.FileDialog(msoFileDialogFolderPicker)
With dlgOpen
    If .Show <> -1 Then MsgBox "您没有选择文件夹!": Exit Sub
    lj = .SelectedItems(1)
End With
Application.DisplayAlerts = False
For Each sh In ww.Worksheets
    If sh.Index > 1 Then sh.Delete
Next sh
Application.DisplayAlerts = True
t = Timer
f = Dir(lj & "\*.xls*")
m = 1
Do While f <> ""
    If f <> ThisWorkbook.Name Then
        m = m + 1
        Set wb = Workbooks.Open(lj & "\" & f, 0)
        wb.Worksheets(1).Copy after:=ww.Worksheets(ww.Worksheets.Count)
        mc = Split(wb.Name, ".")(0)
        With ww.Worksheets(ww.Worksheets.Count)
            .Name = mc
        End With
        sht.Cells(m, 1) = m - 1
        sht.Cells(m, 2) = mc
        sht.Hyperlinks.Add anchor:=sht.Cells(m, 2), Address:="", SubAddress:="'" & mc & "'!a1", TextToDisplay:=mc
       wb.Close False
    End If
f = Dir
Loop
Application.ScreenUpdating = True
MsgBox "合并完毕!耗时:" & Format(Timer - t, "0.00") & "秒", 64, "EXCEL提醒"
End Sub

评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-16 11:06 | 显示全部楼层
Sub 合并多薄多表为一薄多表()
Application.ScreenUpdating = False
Dim ww As Workbook
Dim sh As Worksheet
Dim arr(), brr()
Dim wb As Workbook
Dim dlgOpen As FileDialog
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Set ww = ThisWorkbook
Set sht = ww.Worksheets("目录")
sht.[a1].CurrentRegion.Offset(1) = Empty
lj = ThisWorkbook.Path
VBA.ChDir lj
Set dlgOpen = Application.FileDialog(msoFileDialogFolderPicker)
With dlgOpen
    If .Show <> -1 Then MsgBox "您没有选择文件夹!": Exit Sub
    lj = .SelectedItems(1)
End With
Application.DisplayAlerts = False
For Each sh In ww.Worksheets
    If sh.Index > 1 Then sh.Delete
Next sh
Application.DisplayAlerts = True
t = Timer
f = Dir(lj & "\*.xls*")
m = 1
bt = InputBox("请输入待合并工作表的标题行数", "标题行数", "2")
If bt = "" Then MsgBox "您没有输入标题行数,请按确定退出!": Exit Sub
Do While f <> ""
    If f <> ThisWorkbook.Name Then
        Set wb = Workbooks.Open(lj & "\" & f, 0)
        For Each sh In wb.Worksheets
            r = sh.UsedRange.Rows.Count
            If r > Val(bt) Then
                If Not d.exists(sh.Name) Then
                    sh.Copy after:=ww.Worksheets(ww.Worksheets.Count)
                    d(sh.Name) = ""
                    m = m + 1
                    sht.Cells(m, 1) = m - 1
                    sht.Cells(m, 2) = mc
                    sht.Hyperlinks.Add anchor:=sht.Cells(m, 2), Address:="", SubAddress:="'" & sh.Name & "'!a1", TextToDisplay:=sh.Name
                Else
                    rs = ww.Worksheets(sh.Name).UsedRange.Rows.Count + 1
                    sh.Rows(Val(bt) + 1 & ":" & r).Copy ww.Worksheets(sh.Name).Cells(rs, 1)
                End If
            End If
        Next sh
       wb.Close False
    End If
f = Dir
Loop
Application.ScreenUpdating = True
MsgBox "合并完毕!耗时:" & Format(Timer - t, "0.00") & "秒", 64, "EXCEL提醒"
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-9-16 11:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-9-16 16:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常好的多簿合一的示例,非常强大,我回去试一下

TA的精华主题

TA的得分主题

发表于 2022-9-16 18:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-9-17 08:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-9-17 09:06 | 显示全部楼层
3190496160 发表于 2022-9-16 11:06
Sub 合并多薄多表为一薄多表()
Application.ScreenUpdating = False
Dim ww As Workbook

麻烦楼主测试一下,好像含图片的工资表合并后无图片

TA的精华主题

TA的得分主题

发表于 2022-9-17 09:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太好了,谢谢大神!!

TA的精华主题

TA的得分主题

发表于 2022-9-17 10:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 10:18 , Processed in 0.055433 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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