您的位置 首页 > 娱乐休闲

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 = A(prompt:="请用鼠标点击标题行:", Type:=8) myArray = Work(myRange) Set titleRange = A(prompt:="请用鼠标点击要拆分的字段,必须是第一行,且为1个单元格", Type:=8) title = columnNum = A = False A = False Dim i&, Myr&, Arr, num& Dim d, k For i = S To 1 Step -1 If Sheets(i).Name <> "数据源" Then Sheets(i).Delete End If Next i Set d = CreateObject("Scri;) Myr = Worksheets("数据源").U 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 A * 1 '设置连接字符串,根据版本创建连接 Case Is <= 11 conn.Open "Provider=Micro;Extended Properties=excel 8.0;Data source=" & T Case Is >= 12 conn.Open "Provider=Micro;Data Source=" & T & ";Extended Properties=""Excel 12.0;HDR=YES"";""" End Select Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'" Work after:=Sheets(S) 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 Selec Worksheets(S).Activate Ac Selec Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False A = False Next i conn.Close Set conn = Nothing A = True A = True MsgBox " 已经拆分完成" & vbCrLf & vbCrLf & "更多内容敬请关注公众号:word_excel_ppt", vbInformation, "云淡风轻微课堂" End Sub


更多精彩请关注公众号:word_excel_ppt

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“Excel小技巧使用VBA,10秒钟搞定拆分工作表内附代码”边界阅读