案例:一张数据表中多个月份的成绩,按月拆成单个表

二,插入以下代码,点击运行,根据需求输入要拆分的列

代码如下
Sub splitTableByColumnsValue()
'按列内容拆分表
Application.ScreenUpdating = False
Dim x As Integer '定义行数
Dim y As Integer '定义列数
x = 2
y = Int(InputBox("请输入拆分的列"))
'判断表是否存在,不存在则创建
Do While Sheet1.Cells(x, y) <> ""
flag = True
For Each sht In Worksheets
If Sheet1.Cells(x, y) & "" = sht.Name Then
flag = False
Exit For
End If
Next
'不存在时创建表
If flag Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = Sheet1.Cells(x, y)
'遍历一次行数加一行
x = x + 1
Loop
'循环复制内容
For j = 2 To Sheets.Count
Sheet1.UsedRange.AutoFilter field:=y, Criteria1:=Sheets(j).Name
Sheet1.UsedRange.Copy Sheets(j).Range("A1")
Next
Sheet1.UsedRange.AutoFilter '取消筛选
MsgBox "完成"
Application.ScreenUpdating = True
End Sub
下图是分别按照不同条件进行2次拆分

思路:
对列的值和所有工作表名进行遍历,判断是表否存在,不存在,则新建工作表
以工作表的名称作为作为列的值进行筛选,并复制内容到对应的工作表