等你点KeepLearn关注都等出蜘蛛网了

excel怎么拆分内容_excel怎么拆分表格里的内容_excel里怎么拆分单元格

这是我VBA分享的第六篇,前五篇我们讲了:

在哪里编辑VBA,对象是什么,工作簿对象

数据类型,常量和变量

单元格对象

循环和比较运算符

条件语句

可以戳下面这个链接进入第四节课进行复习哦:

前方碎碎念

好像,有一个月没有写公众号了??拖更不需要理由,何况这根本不算拖更,本来这就不是一个定期更新的公众号嘛~~

说点更新了一篇就停止的三月份我干了啥。有不少有意思的事情,尝试了不少人生新鲜的事情。比如跨过了30岁大关(其实前后并没有感受到什么差别);比如和娘亲照了人生第一次艺术照;比如作为一个社恐居然在魔都的一个财务分享社群Why+做了人生第一次关于EXCEL的分享。人生真的应该尽量不给自己设限去感受不同的事情,有时候,其实只是你以为自己做不到罢了不是?

回到正题,我们来说说上次更新说到我们这次要讲的小案例。以后也许我会放一些常用的VBA代码文件在百度云里给大家自取,比如实现拆分工作表,合并工作表之类的需求。

一、Case背景回顾

我们有一个这样资产清单(当然是伪造的):

这张表和上次的表内容有点不一样,因为我找不到上次的表了。Anyway,内容和意思基本是一样的。

这里我们有几点假设,这个表是系统自动导出来的,因此每次都是这么几列内容,地点永远在C列,并且C列的数据是已经排序好的。而我们需要将这样一张表,拆成每个地方一张工作簿,并且将这个工作簿的名字存成该仓库地点的工作簿。最后我们会得到这样的结果:

excel怎么拆分表格里的内容_excel怎么拆分内容_excel里怎么拆分单元格

打开每个文件,是这样的:

excel怎么拆分内容_excel里怎么拆分单元格_excel怎么拆分表格里的内容

所以大概理理思路,我们就是按地区拆分了表,并且重新做了个编号。就这么简单~

二、如何思考代码怎么码

最近因为和很多小伙伴交流了VBA,有很多朋友和我说,其实他们都看过书,也知道一些基础的知识,也知道一定的语法。一段代码放在他们面前,他们能够大概看明白是在做啥。但是,如果自己有什么需求要从一张白纸写起营销引流,却完全不知道怎么下手。

如何思考真的是一个很难说清楚的问题啊,我努力尝试给大家做个说明。如果你还是没明白也请不要打我。

在初级的阶段,其实你就把程序想成是你自己行为的自动化版本。所以每拿到一个需求,首先想如果你自己手工做这个表,你会怎么做(请尽量细化你的行为)?这里头的每一步,用哪个句式,哪个对象,什么样的语法结构可以实现?

我们以今天这个很小很小的案例做一个例子。如果我们人工进行表的拆分,你会怎么做?

发现第一个仓库是北京 → 往下浏览发现北京仓库内容在2到12行 → 新建一个文件 → 将标题行和2-12行内容复制粘贴到新的文件 → 对资产重新进行编号→ 将新建的文件保存为北京.xlsx并关闭

接下来循环这个过程,直到所有的仓库都搞定。

所以,把上面的这些人工活动进行程序化的思考会得出这样的代码思路:

1

循环每一行,比对该行和上一行的仓库是否一致。一致则继续下一行,不一致的时候,该行的上一行为上一个仓库的最后一行,该行则为下一个仓库的开始行。

需要循环语句,字符串变量保存当前仓库以便比对,整数变量储存该仓库开始的第一行

2

有每个仓库的开始行和结尾行之后,新建文件,复制粘贴标题行和内容行

这些都有直接的代码

3

对资产重新进行编号

在循环语句的时候我们做过编号的小例子,忘记的童鞋可以回去翻一翻循环语句那篇推送

4

当所有仓库都复制粘贴完毕,程序就结束了

循环每一行,循环到仓库内容为空的那一行,程序就结束了。但是这里要注意一点,循环到空的时候,我还需要将最后一个仓库的所有内容也做处理,所以当用Do语句做循环的时候,条件需要放在Loop之后:

Do

XXX

XXX

Loop While [条件语句]

三、代码,代码

代码真的好难在公众号上放啊 : ( 整个格式会全部乱做一团粥,我还是截图吧:

excel怎么拆分表格里的内容_excel怎么拆分内容_excel里怎么拆分单元格

其实前面讲完思路,再加上我的备注,我感觉已经没啥需要特别说明的了。。> <

还是再逐段说一说吧,不然显得这篇推送有点草率不是,o(╯□╰)o

前面一堆程序开头的定义变量没啥好说,我们从正文开始:

excel怎么拆分内容_excel怎么拆分表格里的内容_excel里怎么拆分单元格

这一部分是对循环开始前的准备工作,首先是对循环使用的变量 i 进行赋值,第二行。

接着把第一个仓库的值放入临时存储仓库的Temp变量中

最后,第一个仓库的开始行UpBoard是第二行

这里对Temp赋值和Upboard,也可以直接把 i 替换成2,没有什么影响

接下来,我们就进入前面思路里说的逐行循环了,用了Do While的循环,循环语法就不说了,直接说循环部分的内容:

excel里怎么拆分单元格_excel怎么拆分表格里的内容_excel怎么拆分内容

首先,Do While循环是不会同For…Next循环那样自己每次对循环变量i增加1的,所以,我们需要自己将每次变量 i 的增加写在代码中间。

Temp变量中已经放入了第一个仓库的值,因此我们将循环的每一行和临时的仓库变量进行比对,如果比对一致,说明这一行和上一行是一个仓库,我们继续下一行就好了。如果不一样呢,就需要做一系列的操作。

另外小插入一个点:

这个循环变量每次增加1的代码,有时候会写在Do循环开始的时候,有时候在结尾,这取决于你的需求。大家想想这里为啥写在后面IF判断语句的前面而不是IF判断语句结束了,才写 i = i +1?(等全部语句讲解完毕我们再来揭开谜底)

excel里怎么拆分单元格_excel怎么拆分内容_excel怎么拆分表格里的内容

以上就是当我们发现 i 行是一个新的仓库的资产时候要做的事情啦:新建工作簿,标题栏和资产内容的复制粘贴,对新的表格进行编号,以仓库位置保存工作簿后关闭它。

这些代码除了复制粘贴以外,其他我们前面都讲过哦,不记得童鞋们请回头查阅。

好,接下来,马上就进入下一行循环么?错啦。我们需要对一些变量进行下重新赋值:

excel里怎么拆分单元格_excel怎么拆分内容_excel怎么拆分表格里的内容

首先,下一个仓库的开始行UpBoard不再是2啦,而是发现和上一行不一致的这个 i 行。

其次,你现在的临时仓库不能再是上一个仓库啦,你需要对临时仓库进行重新赋值,让它等于新的仓库名字之后,才能再次循环比对。

到这一步,新仓库的征途就可以开始了,if语句就可以结束啦。我们接着进行接下来的循环,直到:

直到C列的循环的一行为空。我们的工程就结束咯~~

excel怎么拆分表格里的内容_excel里怎么拆分单元格_excel怎么拆分内容

好啦。是不是很简单?我们来看看前面说的,为啥 i = i +1 需要在条件语句之前而不是之后。

做个假设,我们在条件语句,也就是整个IF语句到 End If 全部结束之后,才写 i = i + 1 会如何?

代码如下,我把 i = i +1 挪动了一下:

excel里怎么拆分单元格_excel怎么拆分内容_excel怎么拆分表格里的内容

我们模拟下程序,当上次循环的结束是 i =30:

因为循环开始没有了 i = i +1, 条件判断语句:AssetSheet.Cells(i, 3) Temp 也就是C30单元格还是深圳,条件循环语句结果为假excel怎么拆分表格里的内容,直接跳过条件语句到了 i = i + 1,i 被赋值为31。

接下来是Loop While Cells(i, 3) “”去判断是否要继续循环,C31单元格是个空值,循环结束。所以,程序不会对最后一个仓库做任何操作,那么在这个例子里,深圳仓库就没有被成功的分出来。

而在原来的写法中,i 的增加在判断之前,所以, i = 30 的循环结束之后的下一个循环的第一步,i 就变成了31,那么条件语句AssetSheet.Cells(i, 3) Temp则为真,对最后一个仓库(在这个案例中是深圳)的操作不会被遗漏。

刚开始写Do While循环语句可能这么说还是比较难理解,我们还有一些更简单粗暴的方式excel怎么拆分表格里的内容,比如先确定好最后一行有内容的行次,再用For…Next循环在确定好的行次中间循环。因为还没有讲到这个对象的方法所以这次我们就考验了下大家的逻辑能力。我相信,大家都是能懂的!

四、结束语

小小的一篇推送,又在电脑前端坐了将近四个多小时才写完,又要过我理想的睡眠时间了 T T。最讨厌写完之后的找推送图片,以后决定统一用这个封面!哎,说实话,我写这段代码才花了几分钟,可是试图用各种方法想给读者大大们讲明白真的好难。我也不知道大家到底有没有得到一点点的启发或者收获。如果有问题,欢迎留言。因为我可能不会在微信规定的回复期内看到你的消息,所以最好能留下你的微信号。

下一次推送,我想给大家讲讲EXCEL怎么录代码。有语法基础的大家可以在录好的代码的基础上进行修改。再讲点轻松愉快的怎么进行代码的调试,碰到问题有啥搜索的办法吧。

由于我的CPA备考季又开始了,我不能保证下一次啥时候推送,这个完全取决于我的复习进程。我还想有空时候给大家分享下怎么以龟速不要太累的通过考试和怎么用日程表管理自己的时间,等等等等。等我有空了再慢慢码字吧。

这是一个很随性的公众号,用来分享公号主自己学到的,用到的,听到的,感受到的各种乱七八糟的事情,如果你有兴趣:

1

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注