EXCEL如何将一个大文件拆分数据条数相等的若干小文件

232次阅读
没有评论

宝贝们我今天学到了一个绝活儿!

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

把一份几万行的文件拆分成若干小文件,要求每个小文件有50行数据。

这里我们用下表来演示操作步骤:一共有5列,第一行为表头,数据的范围是第2-24行。我们将此表拆分为每个有5行数据的若干小文件。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

首先右击表名,也就是图中的“sheet1”,点击“查看代码”。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件
EXCEL如何将一个大文件拆分数据条数相等的若干小文件

复制下面的代码。

Sub copybat()
    Dim i, j, k, m, r As Integer
    Dim n, total_data As Long
    Dim path As String
    Dim title_area, data_column, data_areas As Range
   
    Set title_area = Application.InputBox(prompt:="请用鼠标选择表头及表标题所在区域", title:="选择", Type:=8) '选取表头区域
    Set data_column = Application.InputBox(prompt:="请鼠标选择需要拆分数据的开始行区域", title:="选择", Type:=8) '选取拆分起始处
    m = data_column.Row      '获取分割开始行所在区域行号
    r = data_column.Column   '获取分割开始行所在区域列号
    j = data_column.Columns.Count   '获取分割开始行区域列数
    i = Application.InputBox(prompt:="请输入每次分割数据条目数", title:="选择")
  
   '获取需要分割的数据总条数。这里,可以用两种办法获取到数据区域的尾部行号
      '第一种,使用传统的:End(xlDown).Row,优点是速度快,缺点是有空白行时会出错
      '第二种,使用查找方式find,优点是基本不会出错,缺点是条数较多时候可能会慢一点
   'total_data = Cells(data_column(1, 1)).End(xlDown).Row - m + 1 
    total_data= Cells.Find("*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row- m + 1   
    If MsgBox("本次分割文件数据总数为:" & total_data & "条,将会被分割成" & WorksheetFunction.RoundUp(total_data / i, 0) & "个文件," _
                & "点击“确定”开始分割,点击“取消”返回", vbOKCancel, "确认") = vbOK Then
        filename = Application.InputBox(prompt:="请输入分割后的文件主名,默认为“分割文件”", title:="选择", Default:="分割文件") 
        With Application.FileDialog(msoFileDialogFolderPicker)  '获取分割后的文件存储路径
            If .Show = False Then Exit Sub
                path = .SelectedItems(1)&"\"   '加入"\",否则,文件会被存储到选定路径的上一层
        End With
        Application.ScreenUpdating = False
        k = 0   '第几次分割输出,用于标识分割文件次数
        For n = m To total_data Step i   '从开始分割的行往下计数
            Set data_areas = Range(Cells(n, r), Cells(n + i - 1, j))   '设置每次循环体内的分割数据主体
            Application.Union(title_area, data_areas).Select           '把表头区域以及本次循环体内的数据区域进行合并
            Selection.Copy
            Workbooks.Add
            Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False      '特殊粘贴:包含源格式的粘贴,以便保持所有格式一致
           k = k + 1
           ActiveWorkbook.SaveAs filename:=path & filename & "_" & k & ".xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False      '按照既有的文件名、路径、循环次数合并起来存储文件
            ActiveWindow.Close
        Next n
        MsgBox "文件分割完毕!", vbDefaultButton1, "提示"
    End If
    Application.ScreenUpdating = True
End Sub

点击按钮运行。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

在弹出的对话框内填入表头区域,这里我们填入A1:E1,点击确定。

注意:不要锁定区域!

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

继续填入拆分数据的开始行区域,这里填入A2:E2,点击确定。

注意:不要锁定区域!

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

接着填入数据条数,这里填5。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

点击确定。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

这里可以为文件命名。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

选择分割后的文件位置。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

点击确定,开始执行分割,文件越大等待的时间越长。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件

下面是拆分后的文件。

EXCEL如何将一个大文件拆分数据条数相等的若干小文件
EXCEL如何将一个大文件拆分数据条数相等的若干小文件

这次我们用到了VBA(Visual Basic宏语言)。

VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。它也可说是一种应用程式视觉化的 Basic 脚本。

1993年由微软公司开发的应用程序共享一种通用的自动化语言——–即Visual Basic for Application(VBA),实际上VBA是寄生于VB应用程序的版本。

在这里特别感谢大佬救我狗命。

代码来源:https://zhuanlan.zhihu.com/p/81580481?from_voters_page=true

雨米
版权声明:本站原创文章,由 雨米2022-01-27发表,共计2370字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)