一起学习,一起进步~~
今天我们正式开始分享一些关于工作表的拆分的一些知识,前面我们已经陆陆续续的学习了很多关于工作表的合并的操作,现在我们开始进入工作表的合并的对立面-工作表的拆分,将总表按照各种要求进行花式拆分,小伙伴们准备好了,准备开车了
今天我们来分享下如何按照指定列进行拆分工作表
场景说明
假设我们现在有一个工作表,是所有的班级的学生的考试成绩的汇总表,我们现在希望按照班级来进行分析,分析每个班级的最高分和平均分,从而针对不同的班级进行有针对性的指导
从上面的信息中,我们得到了我们需要按照班级这一列来进行拆分,所以我们拆分的参照列就是班级这一列了,如果让你手工操作你会怎么操作呢?先进性筛选,然后按照每个班级选项进行新建工作表,复制粘贴,如此循环
代码区
先来看看代码
Sub chai()
Dim rng As Range, trng As Range, arr, sthn As Worksheet
Set trng = Application.InputBox("请选择标题栏", "标题栏的确定", , , , , , 8)
TitleR = trng.Rows.Count
TitleC = trng.Column
Set rng = Application.InputBox("请选择要拆分的参照列", "参照列的确定", , , , , , 8)
num = ActiveSheet.Index
TargetCol = rng.Column - (TitleC - 1)
Worksheets.Add after:=Worksheets(Worksheets.Count)
rng.Copy Cells(1, 1)
With ActiveSheet.UsedRange
.RemoveDuplicates 1, xlNo
End With
l = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(Cells(2, 1), Cells(l, 1))
arr = rng
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
For i = 1 To UBound(arr)
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sthn = ActiveSheet
ActiveSheet.Name = arr(i, 1)
Worksheets(num).Activate
Rows(TitleR).AutoFilter Field:=TargetCol, Criteria1:="=" & arr(i, 1) & ""
With ActiveSheet.UsedRange
.SpecialCells(xlCellTypeVisible).Copy sthn.Cells(1, 1)
End With
Next i
End Sub
先来看看代码执行的过程
首先先要我们选择标题栏,为什么要在这里选择标题栏呢?
因为我们不确定我们的标题栏有几行,如果是单行标题最好,直接从第一行开始筛选,但是像我们案例中这样的有多行表头的,就不行了,所以我们要选确定标头的区域
然后我们立刻得到标题行总共有多少行,这个方法我们前面已经讲过很多次了。
然后就需要我们确定拆分的参照列了,我们前面已经说过了是按照班级分析,自然就是按照班级来进行拆分了,所以这里选择班级列
然后稍等一会结果就出来了,所有数据按照班级成功的拆分完毕
每个班次的数据也是完全正确的
代码分析
我们现在来看看代码
Set trng = Application.InputBox("请选择标题栏", "标题栏的确定", , , , , , 8)
TitleR = trng.Rows.Count
TitleC = trng.Column
Set rng = Application.InputBox("请选择要拆分的参照列", "参照列的确定", , , , , , 8)
这几段代码大家都非常的熟悉了,只要是选择工作表的区域,然后确定行数,列数的,这里就不在详细说明了。
rng.Copy Cells(1, 1)
With ActiveSheet.UsedRange
.RemoveDuplicates 1, xlNo
End With
我们将班级这一列的数据全部复制过来,然后进行去重。
RemoveDuplicates就是单元格之间进行去重操作的方法,大家一定要记住,在后续的工作中,这个方法会经常使用到,他能够保留单元格数据的唯一值,这样我们不用在通过条件格式来找出重复想在删除了。
当然这一切都是在另外一个工作表中完成的, 算是一个辅助的工作表,当我们得到了唯一的班级序列之后,这个工作表就没有价值了,可以直接删除了。
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Application.DisplayAlerts 是设置弹窗告警是否出现的false就是不出现,当我们删除工作表的时候,都会有一个提示窗口
如果不想要就设置false就可以,他对于我们代码的正常执行有很大的影响,所以一般都会关掉,在完成删除之后再打开
For i = 1 To UBound(arr)
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sthn = ActiveSheet
ActiveSheet.Name = arr(i, 1)
Worksheets(num).Activate
Rows(TitleR).AutoFilter Field:=TargetCol, Criteria1:="=" & arr(i, 1) & ""
With ActiveSheet.UsedRange
.SpecialCells(xlCellTypeVisible).Copy sthn.Cells(1, 1)
End With
Next i
这段代码就是执行数据的筛选以及筛选之后的数据的复制粘贴的,属于固定的套路格式,大家记下来直接使用就好。
================================
好了,明晚21:00,准时再见!
联系客服