之前,有网友曾将多个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

相关推荐