Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Excel小技巧:使用VBA,10秒钟搞定拆分工作表(内附代码),希望能够帮助你!!!。
前面我们发布过将多个Excel工作簿中的工作表合并到一个工作表簿中,就有网友提了一个问题,如何讲一个Excel工作簿中的工作表拆分成多个工作表,其实实现的方法很多,如果数据少的话,我们直接采用Excel的筛选,然后复制粘贴就可以了,如果数据比较多,或者是日常工作的话,每天这样复制粘贴,就很麻烦~,或者我们使用透视表也可以。我们这讲就来使用VBA的方法来实现,这个方法很简单,只需要复制代码(代码也是小编从网上找的,然后修改了下,这样通用性就更强了,更多精彩请关注公众号:word_excel_ppt),运行就可以了。
1、素材文件
素材文件
我们的素材文件是以某公司为例,数据记录了公司旗下有7家店铺,从2016年1月1日到2018年12月31日,每天销售的流水数据。
存放数据的工作表名称已修改为“数据源”,工作表的第一行为标题行,一共有2195行数据。
现在我们想按照店铺名称,将整个工作表拆分开。
2、操作步骤
打开我们的工作表文件以后,将需要拆分的工作表名字修改成“数据源”。然后按键盘上面的Alt+F11,弹出VBA编辑的窗口,将代码粘贴进代码编辑器中(代码见最后附件);
代码窗口
重要的事情重复一次,因为我们代码里面,要拆分的工作表名称叫"数据源",所以你直接把你要拆分的工作表名称修改成“数据源”才能正常运行。
3、运行程序
在VBA编辑器中,点击示例中的绿色三角(见上图),或者是按键盘上面的F5都可以。
选择标题行
此时会让我们选择标题行,我们通过鼠标点击标记标题行(第1行)就可以了;
选择拆分字段
接下来会让我们选择,需要按照哪个字段拆分,我们就选择门店名称(B1)单元格,然后直接点确定。
搞定
这个时候程序就会自动运行,鼠标会闪动,我们需要等一下,运行的时间就和你电脑的配置以及要拆分文件的大小有关,以我们的素材为例,大概需要10秒钟,就可以搞定,然后会弹出一个提示完成的消息框,我们点确定就可以。
运行结果
回到我们的文件里面,可以看到程序已经给我们拆分好了,是不是觉得很方便呢?
附程序代码(程序在Win7+Excel 2016 运行可行):
视频演示,稍后发布在头条专栏中
Sub 按照指定字段拆分工作表()
'本程序来源于网络,原作者不详,特留此句对原作者表示感谢;
'本程序中,云淡风轻微课堂(公众号:word_excel_ppt)进行了部分修改,适用性更广
Dim myRange As Variant
Dim myArray
Dim titleRange As Range
Dim title As String
Dim columnNum As Integer
myRange = Application.InputBox(prompt:="请用鼠标点击标题行:", Type:=8)
myArray = WorksheetFunction.Transpose(myRange)
Set titleRange = Application.InputBox(prompt:="请用鼠标点击要拆分的字段,必须是第一行,且为1个单元格", Type:=8)
title = titleRange.Value
columnNum = titleRange.Column
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim i&, Myr&, Arr, num&
Dim d, k
For i = Sheets.Count To 1 Step -1
If Sheets(i).Name <> "数据源" Then
Sheets(i).Delete
End If
Next i
Set d = CreateObject("Scripting.Dictionary")
Myr = Worksheets("数据源").UsedRange.Rows.Count
Arr = Worksheets("数据源").Range(Cells(2, columnNum), Cells(Myr, columnNum))
For i = 1 To UBound(Arr)
d(Arr(i, 1)) = ""
Next
k = d.keys
For i = 0 To UBound(k)
Set conn = CreateObject("adodb.connection")
Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接
Case Is <= 11
conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & ThisWorkbook.FullName
Case Is >= 12
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
End Select
Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'"
Worksheets.Add after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = k(i)
For num = 1 To UBound(myArray)
.Cells(1, num) = myArray(num, 1)
Next num
.Range("A2").CopyFromRecordset conn.Execute(Sql)
End With
Sheets(1).Select
Sheets(1).Cells.Select
Selection.Copy
Worksheets(Sheets.Count).Activate
ActiveSheet.Cells.Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Next i
conn.Close
Set conn = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox " 已经拆分完成" & vbCrLf & vbCrLf & "更多内容敬请关注公众号:word_excel_ppt", vbInformation, "云淡风轻微课堂"
End Sub
更多精彩请关注公众号:word_excel_ppt
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章