Excel VBA 7.50玩转工作表拆分,无拆分列,按照行数来拆分

一起学习,一起进步~~

今天我们继续研究工作表的拆分,在昨天我们分享了针对单个工作表按照指定列来进行拆分的方法,在上节的学习中,我们也是接触了几个知识点,一个是如何得到某一列唯一值的序列,另外一个就是工作表执行筛选之后,如果将筛选的结果复制出来,而不是将所有的数据复制出来,这几个知识点在后续的单元格的操作中会很常用,今天呢,我们换个方式,我们不给予指定列了 ,我们直接按照行数来进行拆分

场景说明

现在我们手上的这份数据是这样的,我们有全年级所有的同学的学科考试成绩,但是全年级的人数太多,一整个表进行分析的话,数据明显太大,最终的结果也不太准确,现在我们希望将这份数据表按照固定的行数来进行拆分,拆分成多个工作表,这样我们就可以针对指定的个体数量来进行分析,得到一个相对精确一些数据

这里不是按照列来进行拆分了,而是按照指定的行数来进行拆分了,那么我们没有办法用筛选的方式来进行了,那么这里要如何处理呢?

代码区

Sub chai()Dim rng As Range, sth As Worksheet, sthN As WorksheetSet sth = ActiveSheetSet rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)TitleR = rng.Rows.CountTitleC = rng.ColumnTitleColNum = rng.Columns.Countnum = InputBox("请输入间隔拆分的行数")l = ActiveSheet.Cells(Rows.Count, TitleR).End(xlUp).RowCountR = l - TitleRFor 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 iEnd 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).RowCountR = 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,准时再见!

(0)

相关推荐