您的位置:首页 > 其它

多个excel文件如何快速合并到一个excel中

2017-03-03 13:10 751 查看
http://jingyan.baidu.com/article/f0062228d16ba9fbd3f0c82b.html

多个excel文件如何快速合并到一个excel中

'汇总各工作簿数据到汇总表中

Sub 汇总多工作簿()

    Dim r As Long, c As Long, str As String, sht As Worksheet

    

    '定义r,c为长整型

    r = 2

    '赋值r初值为2

    Application.ScreenUpdating = False    '屏幕闪烁关闭

    Dim filename As String, wb As Workbook, Erow As Long

    '定义filename 为文本型,wb 为 工作簿,sht为工作表,Erow 为长整型

    Dim fn As String, Arr As Variant

    'on error resume next

    On Error GoTo VeryEnd

    '程序中出现语句等运行错误时,程序跳跃到后面  VeryEnd行

    filename = Dir(ThisWorkbook.Path & "\*.xlsx")    '对文件夹内的工作簿进行循环,循环查找的格式  *.xls

    ' MsgBox filename

    Do While filename <> ""

        '对文件夹内的工作簿进行循环,截止到最后一个工作簿

        If filename <> ThisWorkbook.Name Then

        '判断文件是否是本工作簿

        'else

            '  Erow = Range("A1").End(xlDown).Row   '取得汇总表中第一条空行行号

            '  MsgBox "erow=" & Erow

            fn = ThisWorkbook.Path & "" & filename    '取得循环符合条件工作簿的  文件夹地址,赋值给fn 这个变量

            ' MsgBox "现在汇总的工作簿是fn= " & fn

            Set wb = GetObject(fn)

            '将fn代表的工作簿对象赋给变量

            Set sht = wb.Worksheets(1)

            'range,cells

            '汇总的是第1张工作表

            Arr = sht.Range("a2:m" & sht.Range("a2").End(xlDown).Row)            '将结果存放在定义好的数组arr中

            c = UBound(Arr, 1)

            ' MsgBox "现在汇总的工作簿行数= " & c

            '将数组arr中的数据写入工作表

            Range("a" & r).Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr           '将目标结果存放在目标工作表中特定的区域

            r = r + c

            '  MsgBox "现在汇总到的行数是:" & r

            wb.Close False

        End If

        filename = Dir      '进行下一步的循环

    Loop

VeryEnd:

    Application.ScreenUpdating = True

    '屏幕闪烁打开

End Sub

########################################################################################################################

Dim r As Long, c As Long, str As String, sht As Worksheet, brr(1 To Rows, 1 To 1)

########################################################################################################################

'汇总各工作簿数据到汇总表中

Sub 汇总多工作簿()

    Dim r As Long, c As Long, str As String, sht As Worksheet, brr(1 To 10000, 1 To 1)

    

    '定义r,c为长整型

    r = 2

    '赋值r初值为2

    Application.ScreenUpdating = False    '屏幕闪烁关闭

    Dim filename As String, wb As Workbook, Erow As Long

    '定义filename 为文本型,wb 为 工作簿,sht为工作表,Erow 为长整型

    Dim fn As String, Arr As Variant

    'on error resume next

    On Error GoTo VeryEnd

    '程序中出现语句等运行错误时,程序跳跃到后面  VeryEnd行

    filename = Dir(ThisWorkbook.Path & "\*.xlsx")    '对文件夹内的工作簿进行循环,循环查找的格式  *.xls

    ' MsgBox filename

    Do While filename <> ""

        '对文件夹内的工作簿进行循环,截止到最后一个工作簿

        If filename <> ThisWorkbook.Name Then

        '判断文件是否是本工作簿

        'else

            '  Erow = Range("A1").End(xlDown).Row   '取得汇总表中第一条空行行号

            '  MsgBox "erow=" & Erow

            fn = ThisWorkbook.Path & "" & filename    '取得循环符合条件工作簿的  文件夹地址,赋值给fn 这个变量

            ' MsgBox "现在汇总的工作簿是fn= " & fn

            Set wb = GetObject(fn)

            '将fn代表的工作簿对象赋给变量

            Set sht = wb.Worksheets(1)

            'range,cells

            '汇总的是第1张工作表

            

            Arr = sht.Range("a2:m" & sht.Range("a2").End(xlDown).Row)            '将结果存放在定义好的数组arr中

            c = UBound(Arr, 1)

            For i = 1 To c

                brr(i, 1) = filename

            Next

            ' MsgBox "现在汇总的工作簿行数= " & c

            '将数组arr中的数据写入工作表

            Range("b" & r).Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr           '将目标结果存放在目标工作表中特定的区域

              Range("a" & r).Resize(UBound(Arr, 1), 1) = brr

              Erase brr

            r = r + c

            '  MsgBox "现在汇总到的行数是:" & r

            wb.Close False

        End If

        filename = Dir      '进行下一步的循环

    Loop

VeryEnd:

    Application.ScreenUpdating = True

    '屏幕闪烁打开

End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐