乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > excel拆分单元格-Excel VBA 7.52按照指定单元格内容进行拆分,想怎么拆就怎么拆

excel拆分单元格-Excel VBA 7.52按照指定单元格内容进行拆分,想怎么拆就怎么拆

作者:乔山办公网日期:

返回目录:excel表格制作

前景提要(文末提供源码下载)


好了今天我们来继续玩一下工作表的拆分,之前我们已经尝试了用指定列,指定行的方式来进行工作表的拆分,不知道有没有点燃小伙伴们的拆分热潮呢?之前我在写按照工作表的指定行数进行拆分的时候,就想到一个问题,要是行数不确定,只能按照某个单元格的内存为参照物,如何进行拆分呢?我平时在进行工作表的拆分的时候,时不时也会碰到这样的问题,一般是在月总结的时候会碰到,不知道大家有没有这样的需求,我先分享出来


场景说明


这里请容许我偷懒下,继续利用之前的小案例吧


这里我们将之前的案例稍微修改一下,更换下场景,这次我们这里放置的是某个班级所有学生历次的考试成绩,不过因为汇总的时候为了方便都是不断的往下新增数据的,并且为了打字方便,姓名都是直接复制的,结果要进行分析的时候,发现这样很难看出来每个学生的成绩变化情况,所以现在我们需要针对总表进行拆分,我们以A1即第一个学生的名字为参照物进行拆分,我们来看看如何实现


代码区


Sub chai()Dim rng As Range, sth As Worksheet, sthn As Worksheet, pathn$, str$, a As Rangepathn = ActiveWorkbook.PathSet sth = ActiveSheetSet rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)TitleR = rng.Rows.CountTitleC = rng.ColumnTitleColNum = rng.Columns.Countstr = InputBox("请输入参照内容")l = ActiveSheet.Cells(Rows.Count, TitleR).End(xlUp).RowCountR = l - TitleRSet a = Cells(TitleR + 1, TitleC)For i = TitleR + 2 To l If Cells(i, TitleC) = str Or i = l Then k = k + 1 Worksheets.Add after:=Worksheets(Worksheets.Count) Set sthn = ActiveSheet rng.Copy sthn.Cells(1, 1) sth.Activate If i <> l Then Range(a, Cells(i - 1, TitleColNum + TitleR - 1)).Copy sthn.Cells(TitleR + 1, 1) Else Range(a, Cells(i, TitleColNum + TitleR - 1)).Copy sthn.Cells(TitleR + 1, 1) End If sthn.Name = "第" & k & "次拆分" Set a = Cells(i, TitleC) End IfNext iEnd Sub

来看看代码执行的过程


这已经是套路了。不解释了


输入我们想要的的参照物


然后静候佳音


为了检查方便,我们抽取最后一次的数据来看看


代码分析


来看看今天的代码解析


Set rng = Application.InputBox("请选择表头区域", "表头区域的确定", , , , , , 8)TitleR = rng.Rows.CountTitleC = rng.ColumnTitleColNum = rng.Columns.Count

常规套路操作,表头数据不规则,我们肯定要获得表头的区域的


str = InputBox("请输入参照内容")

这里就是我们要获得输入的参照物的内容,今天就简单一点,使用inputbox函数来直接实现,相对于inputbox方法,函数的写法要简单多,但是如果有输入内容限制的话,最好还是使用inputbox方法


然后进入我们的循环体


在进入循环之前,我们要先做一件事情


Set a = Cells(TitleR + 1, TitleC)

这一步非常的重要,在我们整个循环体中,a的作用也是非常的大的,他代表的就是我们的参照物A1所在的单元格位置,是不断变化的,但是不管怎变,这个变量所代表的的意义是不变的。


来开始进入循环


我们的循环从A2开始,而不是A1,这里注意这个关键点。


然后进入第一个小循环,不断的往下走,当找到下一个A1的位置之后,我们就有了数据区域,数据区域在哪里呢?


Range(a, Cells(i - 1, TitleColNum + TitleR - 1)).Copy sthn.Cells(TitleR + 1, 1)

结合代码来一起看看,找到A1的位置之后,A1的行数正好就是i的值,但是我们的数据区域不含新的这个A1


所以i-1才是上面的数据的区域的行数,这样答应大家应该能够理解了,后面的获取列数的位置,前面已经说过很多次了,这里容许我稍微偷懒下,略过


然后后面就是循环了,来进入最后一个难点,


就是最后一行的判断,到了最后一行之后,肯定不会再往下循环了,所以也不会在找到一个A1了


这个时候我们既要判断了,如果i=L,,就是总行数的时候,我们就直接将a和最后一行之间的区域放在最后一个工作表中,因为不存在另外一个A1了,所以这里我们要判断是否得到最后一行


这样一来下面代码中的不同,大家就应该能够理解了。


=======================================================


本 节 课的案 例源码已经上传 ,需要的 小伙 伴后台私 信“7-52-8”,希望 大家多 支持~~,多多关注 ~ ~


好了,明晚19:00,准时再见!


相关阅读

  • excel怎么求和-Excel跨工作表求和的方法

  • 乔山办公网excel表格制作
  • 在同一个工作表,我们求和通常用SUM、SUMIF或SUMIFS函数,但如果数据不在同一工作表里,我们将如何实现Excel跨工作表求和呢一、表头行列完全一致的多表求和这里要求表里的行列字段名
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网