天天看点

10秒汇总10W个工作簿数据到总表?我来手把手教你

Hi,大家好,本专栏将会从零开始和大家用图文的方式,30天让你从不会到熟练使用函数,0基础开始学习Excel函数,让你喜欢上它!有兴趣的小伙伴可以持续关注我,或者在专栏进行查看学习,愿与君携手共进!

10秒汇总10W个工作簿数据到总表?我来手把手教你

今天,我们讨论如何将指定文件夹下的多个工作簿的数据汇总到汇总表中。方法其实有很多种,不过今天给大家推荐的是VBA,它可以允许标题行具有合并的单元格,允许标题行具有多行,甚至允许数据详细信息区域具有杂乱的合并单元格等等。

其他的方式也有,一个是SQL语句,一个是power query。与前两种方法相比,VBA具有更好的灵活性。

PS:VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言

照例动画操作:

代码如下:

Sub Collectwk()
    Dim Trow&, k&, arr, brr, i&, j&, book&, a&
    Dim p$, f$
    Application.ScreenUpdating = False
    On Error Resume Next
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        If .Show Then
            p = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    If Right(p, 1) <> "\" Then p = p & "\"
    Cells.ClearContents
    Cells.NumberFormat = "@"
    f = Dir(p & "*.xls*")
    Do While f <> ""
        If f <> ThisWorkbook.Name Then
            With GetObject(p & f)
                arr = .Sheets(1).UsedRange
                k = k + 1
                If k = 1 Then
                    ReDim brr(1 To 200000, 1 To UBound(arr, 2))
                    a = 1
                Else
                    a = Trow + 1
                End If
                For i = a To UBound(arr)
                    k = k + 1
                    For j = 1 To UBound(brr, 2)
                        brr(k, j) = arr(i, j)
                    Next
                Next
                .Close False
            End With
        End If
        f = Dir
    Loop
    If k > 0 Then
        [a1].Resize(k, UBound(brr, 2)) = brr
        MsgBox "您已经汇总完成。"
    End If
    Application.ScreenUpdating = True
End Sub      

以上就是我与大家分享,我希望它能帮助你解决工作和学习中的一些问题。如果你觉得很好,就喜欢它。非常感谢您的关注。

我是Excel自动化办公吧,关注我持续分享更多的Excel技巧!

如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。

继续阅读