Excel VBA系列之利用筛选拆分数据至多张工作表

在如下的示例数据表中,分别把相应的数据拆分至以班级命名的多张工作表中。

先来录制一个筛选动作的宏。

1. 点击“开发工具”下的录制宏,然后“确定”。

2. 点击“开始”的“排序和筛选”下的“筛选”按钮。

3. 点击“班级”列的筛选按钮,筛选“A班”的数据,然后“确定”。

4. 停止录制,然后打开Visual Basic,查看代码如下。

Sub 宏1()

'

' 宏1 宏

'

'

    Selection.AutoFilter

    ActiveSheet.Range("$A$1:$F$27").AutoFilter Field:=2, Criteria1:="A班"

End Sub

5. 新建一个过程test,来看一下Selection.AutoFilter的作用。

Sub test()

    Selection.AutoFilter

End Sub

这行代码的作用是执行之后就会出现筛选的按钮,再次执行则取消筛选。

6. ActiveSheet.Range("$A$1:$F$27").AutoFilter Field:=2, Criteria1:="A班"这一段代码:

1)当前活动的工作表的A1至F27单元格范围;

2)进行筛选;

3)参数是第二列,条件是“A班”。

接下来,利用上面的宏代码来完成把各班级的数据分别拆分至其对应的工作表中。

1. 新建一个过程“筛选拆分”,添加一个for循环,从第二张工作表开始循环至最后一张。

Sub 筛选拆分()

Dim i As Integer

For i = 2 To Sheets.Count


Next

End Sub

2. 将上面录制的宏中筛选动作的代码复制到该过程中,并做一些调整。

Sub 筛选拆分()

Dim i As Integer

For i = 2 To Sheets.Count


    Sheet1.Range("A1:F27").AutoFilter Field:=2, Criteria1:=Sheets(i).Name


    Sheet1.Range("A1:F27").Copy Sheets(i).Range("A1")


Next

End Sub

3. 将筛选按钮的代码Selection.AutoFilter放在for循环外面,在for循环中已开启了筛选按钮,结束循环后则取消筛选按钮。

Sub 筛选拆分()

Dim i As Integer

For i = 2 To Sheets.Count


    Sheet1.Range("A1:F27").AutoFilter Field:=2, Criteria1:=Sheets(i).Name


    Sheet1.Range("A1:F27").Copy Sheets(i).Range("A1")


Next

Sheet1.Range("A1:F27").AutoFilter

End Sub

4. 执行以上代码后,即可将数据快速拆分至相应的工作表。

以上示例只是用于演示,实际应用场景请根据自己的需要进行相应的设计或调整。

参考视频:Excel VBA系列之通过筛选拆分数据至多张工作表 - 知乎

你可能感兴趣的:(Excel VBA系列之利用筛选拆分数据至多张工作表)