当前位置:首页 > 微软office > Excel > 正文内容

合并目录下所有工作簿全部工作表到一个新工作表

zyhwxm4年前 (2022-02-09)Excel94
1、将需要合并的文件放在一个文件夹下
2、新建一个空白工作簿
3、打开空白工作簿,在第一个空白工作表,右键-查看代码
4、粘贴下面的代码,点击运行,成功后关闭提示框
说明:复制该文件下所有工作簿的所有工作表,到一个工作表里
代码如下:
Sub 合并目录所有工作簿全部工作表()
Dim MP, MN, AW, Wbn, wn '定义变量(MP=MyPath,MN=MyName,AW=ActiveWorkbookName,Wbn=WorkBookName,wn=workbooksheet(i)name),但未指定变量类型,这样不是很规范
Dim Wb As Workbook '定义变量Wb为工作簿类型 'Dim Wbn As string,G As Long '定义变量Wbn为字符型,G为长整型 'Dim Num,ini As Long '定义Num未声明类型,定义并声明ini为长整型
Dim i, a, b, d, c, e '定义变量,但未指定变量类型,这样不是很规范
Application.ScreenUpdating = False '关闭屏幕刷新
MP = ActiveWorkbook.Path '将当前工作簿(活动工作簿)的路径赋值给MP
MN = Dir(MP & "\" & "*.xls") '将当前工作簿(活动工作簿)的路径加上\*.xls后缀,从而捕获到的*位置的所有文件名的值,Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。
AW = ActiveWorkbook.Name '将当前工作簿(活动工作簿)的名字赋值给AW(不带后缀,只是名字)
Num = 0 'Num=0
e = 1 'ini=0
Do While MN <> "" '运行下面的DO while 循环,直到MN值为空值
    If MN <> AW Then '如果,MN值不等于AW值,就运行IF到END IF之间的判断语句
        Set Wb = Workbooks.Open(MP & "\" & MN) '打开MP\路径下名为MN变量值的工作簿,并引用(Set的作用)赋给Wb ''引用赋值如果,对Wb更改了,被引用的也随着更改了,详细见下边PS(3)
        a = a + 1 '对a进行循环累加
        With Workbooks(1).ActiveSheet '对已打开的所有工作簿中的第一个工作簿中的被激活的工作表运用with语句
            For i = 1 To Sheets.Count '在Workbooks(1).ActiveSheet的所有sheet中循环
                If Sheets(i).Range("a1") <> "" Then '如果Wb工作簿的第i个工作表的A1单元格内容不为空,就进行IF判断内容,如果为空,跳过IF判断进入For的下一个循环
                    Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1) '将wb工作簿中第i个工作表的A1单元格区域扩充为一行,有应用痕迹列数(x)大小的区域,即A1:x1区域, 扩充后区域内的内容复制到Workbooks(1).ActiveSheet的A1位置
                    d = Wb.Sheets(i).UsedRange.Columns.Count 'wb工作簿的第i工作表有应用痕迹的列计数,并赋值给d
                    c = Wb.Sheets(i).UsedRange.Rows.Count - 1 'wb工作簿的第i工作表有应用痕迹的行计数,并赋值给c
                    wn = Wb.Sheets(i).Name 'wb工作簿的第i个工作表的名字赋值给wn
                    .Cells(1, d + 1) = "表名" 'Workbooks(1).ActiveSheet工作表的第1行,第d+1列单元格填充“表名”字符串
                    .Cells(e + 1, d + 1).Resize(c, 1) = MN & wn 'Workbooks(1).ActiveSheet工作表的第e+1行,第d+1列区域扩充为c行,1列区域,并在该区域填充为MN & wn
                    e = e + c
                    Wb.Sheets(i).Range("a2").Resize(c, d).Copy .Cells(.Range("a1048576").End(xlUp).Row + 1, 1) '将区域内容,复制到Workbooks(1).ActiveSheet中,每次从Workbooks(1).ActiveSheet的最后一个非空行开始粘贴
                End If
            Next
            Wbn = Wbn & Chr(13) & Wb.Name '将Wbn的值加上空格和Wb工作簿的名称后赋值给Wbn
            Wb.Close False '将Wb工作簿关闭
        End With
    End If
MN = Dir '获得上边Dir匹配到的下一次文件名;'Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。
Loop
Range("a1").Select '选中当前工作簿的第一个单元格
Application.ScreenUpdating = True '开启屏幕刷新
MsgBox "共合并了" & a & "个工作薄下全部工作表。如下:" & Chr(13) & Wbn, vbInformation, "提示" '给出最后提示
End Sub



版权声明:本文版权归原作者所有,仅供技术参考;

                 若有违反您个人权益,请留言反馈删除相关信息;


本文链接:http://zyh-c.myds.me:8086/post/7.html

相关文章

TEXT函数,这些用法请收好

TEXT函数,这些用法请收好

TEXT函数是使用频率非常高的文本函数之一,她只有两个参数,参数1是要处理的数字,参数2用于指定格式代码,与单元格数字格式中的大部分代码都基本相同。接下来咱们一起看看TEXT函数的常见用法:1、简单的条件判断下图展...

学会这些小技巧,加班照样少不了

学会这些小技巧,加班照样少不了

小伙伴们好啊,今天老祝为大家准备了一组简单实用的小技巧,虽然简单,却能解决很多实际问题,咱们一样一样的看:1、用分列计算文本算式就像下图中,B列的文本算式如何计算出正确的结果呢?其实很简单,先依次单击【文件】【 选...

21个常用日期函数组合

21个常用日期函数组合

今天整理了21个最常用的日期函数组合,分享给大家~1、=TODAY()计算当前的系统日期2、=NOW()计算当前系统日期和时间,设置单元格格式为yyyy/m/d h:mm3、= NOW()-TODAY()计算当前是几点几分。设置单元格格式为...

给我一分钟,制作聚光灯

给我一分钟,制作聚光灯

诸君好。咱们又见了,微笑。我们今天分享一种方法,能实现聚光灯的效果。1,设置条件格式首先选择数据区域,然后单击【开始】选项卡下的【条件格式】按钮,在弹出的操作菜单中选择【新建规则】→【使用公式确定要设置格式的单元格...

运用邮件合并,批量生成各种文档

运用邮件合并,批量生成各种文档

当我们在制作文档主体内容相同,只是具体数据有变化的文档时,就可以灵活运用邮件合并功能,快速批量生成各种文档,不仅可以以邮件的形式批量发送,还可以批量打印,非常快速和方便。1.创建数据源在邮件合并前,需要预先设定或指...

动态扩展真有用,顶端固定下端动

动态扩展真有用,顶端固定下端动

小伙伴们好啊,今天老祝和大家一起学习一个Excel函数公式中的常用招数——动态扩展的引用范围。先来看下面这个表格,要计算从一月份开始,到当前月份的累计销量:C2单元格可以输入以下公式,然后下拉:=SUM($B$2:...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。