将excel按照某一列拆分成多个文件

1.打开目标excel,按alt + f11键打开VBE窗口

 

 


2.选择插入->模块粘贴下面代码到编辑器中

 

 

 

Sub 保留表头拆分数据为若干新工作簿()
Dim arr, d As Object, k, t, i&, lc%, rng As Range, c%
c = Application.InputBox("请输入拆分列号", , 4, , , , , 1)
If c = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
arr = [a1].CurrentRegion
lc = UBound(arr, 2)
Set rng = [a1].Resize(, lc)
Set d = CreateObject("scripting.dictionary")
For i = 2 To UBound(arr)
If Not d.Exists(arr(i, c)) Then
Set d(arr(i, c)) = Cells(i, 1).Resize(1, lc)
Else
Set d(arr(i, c)) = Union(d(arr(i, c)), Cells(i, 1).Resize(1, lc))
End If
Next
k = d.Keys
t = d.Items
For i = 0 To d.Count - 1
With Workbooks.Add(xlWBATWorksheet)
rng.Copy .Sheets(1).[a1]
t(i).Copy .Sheets(1).[a2]
.SaveAs Filename:=ThisWorkbook.Path & "\" & k(i) & ".xls"
.Close
End With
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "完毕"
End Sub

 解释语句:

Sub 拆分工资条() ' 保留标题拆分工作表为若干新工作簿

Dim arr, dict As Object, k, t, i&, lc%, rng As Range, c% ' 定义变量
c = Application.InputBox("请输入拆分列号:", , 1) ' 弹出输入框,要求用户输入拆分列号,默认为第1列
If c = 0 Then Exit Sub ' 如果用户未输入或输入为0,则退出子程序

Application.ScreenUpdating = False ' 关闭屏幕更新,提高代码执行速度
Application.DisplayAlerts = False ' 关闭Excel的警告提示

arr = [a1].CurrentRegion ' 获取当前连续数据区域,赋值给arr
lc = UBound(arr, 2) ' 获取arr的列数,赋值给lc
Set rng = [a1].Resize(, lc) ' 设置rng为从A1开始,列数为lc的区域

Set dict = CreateObject("scripting.dictionary") ' 创建一个字典对象dict

' 遍历数据区域,将数据按照拆分列的值分类存储到字典中
For i = 2 To UBound(arr)
If Not dict.Exists(arr(i, c)) Then ' 如果字典中不存在该分类
Set dict(arr(i, c)) = Cells(i, 1).Resize(1, lc) ' 将当前行数据添加到字典中,键为拆分列的值
Else
Set dict(arr(i, c)) = Union(dict(arr(i, c)), Cells(i, 1).Resize(1, lc)) ' 如果字典中存在该分类,则将当前行数据添加到该分类中
End If
Next

' 获取字典的键和值,准备遍历字典,为每个分类创建一个新的工作簿
k = dict.Keys
t = dict.Items

' 遍历字典
For i = 0 To dict.Count - 1
With Workbooks.Add(xlWBATWorksheet) ' 创建一个新的工作簿
rng.Copy .Sheets(1).[a1] ' 将原数据区域的表头复制到新工作簿的A1位置
t(i).Copy .Sheets(1).[a2] ' 将当前分类的数据复制到新工作簿的A2开始的位置
.SaveAs Filename:=ThisWorkbook.Path & "\" & k(i) & ".xlsx" ' 保存新工作簿,文件名为分类的值加上.xlsx后缀
.Close ' 关闭新工作簿
End With
Next

Application.DisplayAlerts = True ' 恢复Excel的警告提示
Application.ScreenUpdating = True ' 恢复屏幕更新

MsgBox "完毕" ' 显示一个消息框,告知用户操作完成
End Sub

3.保存后回到excel文件,选择开发工具->插入->表单控件(按钮(窗体控件)),没有开发工具选项的在设置里面打开选项如图

 

 

 

 

 

 


4.按住鼠标左键不动然后在excel中划定一个按钮区域,然后会自动弹出的窗口,选择刚才保存的宏,点击确定

 

 

 

5.鼠标从按钮上面移开 ,然后点击按钮输入要列号,就是根据哪列的数据进行拆分文件,下图我们输入4就是按照班级进行拆分,根据不同的班级拆分成不同的文件

 

 

 

5.点击确定后,如果弹出完毕提示框代表拆分完成

 

 


6.到源文件所在的目录文件中查看拆分的文件

 

将excel按照某一列拆分成多个文件

posted @ 2022-06-30 15:31  fffywfn  阅读(1663)  评论(0编辑  收藏  举报