Excel VBA 7.50玩转工作表拆分,无拆分列,按照行数来拆分
一起学习,一起进步~~
今天我们继续研究工作表的拆分,在昨天我们分享了针对单个工作表按照指定列来进行拆分的方法,在上节的学习中,我们也是接触了几个知识点,一个是如何得到某一列唯一值的序列,另外一个就是工作表执行筛选之后,如果将筛选的结果复制出来,而不是将所有的数据复制出来,这几个知识点在后续的单元格的操作中会很常用,今天呢,我们换个方式,我们不给予指定列了 ,我们直接按照行数来进行拆分
场景说明
现在我们手上的这份数据是这样的,我们有全年级所有的同学的学科考试成绩,但是全年级的人数太多,一整个表进行分析的话,数据明显太大,最终的结果也不太准确,现在我们希望将这份数据表按照固定的行数来进行拆分,拆分成多个工作表,这样我们就可以针对指定的个体数量来进行分析,得到一个相对精确一些数据
这里不是按照列来进行拆分了,而是按照指定的行数来进行拆分了,那么我们没有办法用筛选的方式来进行了,那么这里要如何处理呢?
代码区
Sub chai()
Dim rng As Range, sth As Worksheet, sthN As Worksheet
Set sth = ActiveSheet
Set rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)
TitleR = rng.Rows.Count
TitleC = rng.Column
TitleColNum = rng.Columns.Count
num = InputBox("请输入间隔拆分的行数")
l = ActiveSheet.Cells(Rows.Count, TitleR).End(xlUp).Row
CountR = l - TitleR
For i = TitleR + 1 To l Step num
k = k + 1
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sthN = ActiveSheet
sthN.Name = "第" & k & "次拆分"
rng.Copy sthN.Cells(1, 1)
sth.Activate
Range(Cells(i, TitleC), Cells(i + num - 1, TitleColNum)).Copy sthN.Cells(TitleR + 1, 1)
Next i
End Sub
我们来看看代码执行过程
首先依然需要先确定标头的区域,因为我们不确定表头有多少行,而且我们也需要通过表头的位置来确定数据源的区域范围
然后这里会选择让我们输入需要间隔拆分的行数,这里的输入窗口和之前的输入窗口明显不同,后面代码分析我们会说明,这里我们假设按照19行来进行拆分,所以输入19
成功的完成了4次拆分
每个工作表也是含有19个数据,并且将总表中的表头数据都复制过来了,构成了一个新的完整的数据表,成功的实现 来我们的拆分要求
代码分析
Set rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)
TitleR = rng.Rows.Count'获取表头的总行数
TitleC = rng.Column'获取表头初始列的烈数
TitleColNum = rng.Columns.Count'获取表头的总列数,从而确定数据的总列数
num = InputBox("请输入间隔拆分的行数")
l = ActiveSheet.Cells(Rows.Count, TitleR).End(xlUp).Row
CountR = l - TitleR
上面的代码就非常的简单了,我已经在每行的代码后面增加了注释了,相信大家都能够GET
然后我们开始进入循环,这里循环我们如何进行呢?一行一行的吗?肯定不,既然是按照行数进行拆分的,我们每次跃进的行数就是我们要拆分的行数
for 循环不一定每次都只能挪到一个单位?
是的,for循环其实他的标准写法是 后面有一个step ,正常默认都是1,所以可以忽略,但是本案例中,我们就不能够忽略了。
For i = TitleR + 1 To l Step num
****
next i
代表一次前进num步
那么在前进之前,我们需要现针对数据f复制,那么我们每次要复制的区域如何得到呢?
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set sthN = ActiveSheet
sthN.Name = "第" & k & "次拆分"
rng.Copy sthN.Cells(1, 1)
先创建一个新的工作表并且命名成为第一次进行拆分的
然后我们重点寻找下数据区如何来确定
Range(Cells(i, TitleC), Cells(i + num - 1, TitleColNum)).Copy sthN.Cells(TitleR + 1, 1)
确定了首尾单元格的位置和坐标之后就可以直接用range。copy方法将这个区域的数据复制到新的工作表中了,后面的都是用相同的方法得到的。
这里的首尾坐标的判断,其实如果理解这个概念的话,就很好理解的,这里大家要多想多比划几次
====================
本节课的案例源码已经上传,需要的小伙伴后台私信“7-50-Z6”,希望大家多支持~~,多多关注 ~ ~
好了,明晚21:00,准时再见!