这是POINT小数点的第 257 篇文章、
Gaphie写在前面:
好久没聊Excel话题了,作为从数据分析转为咨询顾问,目前在伦敦工作。大部分时间还是需要和Excel打交道,做数据分析的时候总觉得Excel low 没有python强,一点都不高大上。
但实际上会Excel在咨询项目的过程中起到非常大的作用,无论是顶级咨询公司还是顶级投行,每个分析师都必须掌握这项技能,并且必须玩转各种场景。所以我要为Excel证明下:即使说顶尖人才,都需要Excel,工具没有任何高低之分,看你怎么使用。
接下来是王备老师分享的Excel脚本:
大家在日常工作中,应该经常会遇到不少别人给你的表格中有各种各样的合并单元格的情况吧?合并单元格在视觉上会让表格结构清晰不少,大多数情况下可以比较直观的看到哪些内容有着同样的性质。但是合并单元格在表格和数据处理的时候真的是灾难:比如不能方便的选中单独的某行或者某列,不方便剪切移动行列,不能使用数据透视表,用条件公式时也会有各种问题,等等等等,说起来真是太多麻烦了。
所以呢,我就设计了一个脚本可以帮助大家在多种情况时解决掉这个讨厌的合并单元格,并且可以在拆分的时候自动把所有的内容都填充满!
先给大家看看这个脚本的主要功能:
它的功能在这个面板上就都能体现出来了:
1、可以只拆分当前工作表,也可以一次性拆分这个Excel工作簿里所有表;
2、还可以指定区域,比如可以圈选一部分单元格,也可以拆分前几行,还可以把整张表格里所有内容都进行拆分;
3、还可以指定拆分的功能,是否按照单元格原来的内容对拆分出来的空单元格进行填充!
运行的方法呢很简单,把这个小工具文件打开,然后切换到要拆分的表格,再点击“视图”页签,打开“宏”,然后执行“运行拆分工具”的宏就好了:
刚刚那个“待拆分区域”,运行之后的结果就是这样的啦,是不是很方便呢:
下面是给那些想看看代码原理的小伙伴们写的,如果不想看的话可以直接跳到最后看获取小工具的方式
--------------我是代码分割线---------------
首先遇到的问题呢,是如何根据第1、2个单选按钮设置运行的工作表范围,有的小伙伴们可能会想,根据选项得分别设置两段代码,一段里只针对当前工作表运行,另一端用循环对所有工作表运行。
我的解决方法呢,就不用这么复杂了,不需要分成两段,而是直接对所有工作表循环,然后后根据选项和工作表名设置是否跳过就好了:
这样写代码,当按钮不是选择第1个时,所有的工作表都不会被跳过,当按钮选第1个时,工作表的名不等于当前这个工作表时就跳过,只有当名字一样是才运行,这样就只是运行当前工作表了。
第二项工作就是确定要运行的单元格的范围了,需要根据第3-5个单选按钮的选择情况确定。在这里又有两个需要注意的地方了。
1、 就是我在第3个按钮里设计了一个RefEdit控件,可以用它来选择指定的单元格或行列,获取到一个单元格地址文本,它的值有可能是操作者用键盘自己填写的1:2之类的简单字符,也有可能是用这个控件的选择单元格功能获取到的$1:$1、Sheet1!$1:$4、Sheet2!$B$5:$E$13之类的内容,所以有可能会有锁定符号、工作表名字等等许多干扰项。怎么处理比较好呢?最原始的处理方式可能是会根据有没有表格名字进行截取替换等方式进行规范化的处理。而我的处理方式又是很简单,我直接用“Range(RefEdit1.Value).Address”这么短的代码就处理规范了,我们可以用Range()功能把文本转换成一个对象,然后再获取到它的地址,这样就可以把工作表名去掉了。
2、 因为可能是整行、整列的选取,所以单元格对象里可能有许多空白单元格,如果对每个单元格都处理会造成许多不必要的计算量,使代码运行速度较慢,所以可以用Intersect把选区和系统认为被使用过的单元格UsedRange取一个交集,这样就会大大的减少工作量。
我们把前两项内容都解决之后,剩下的工作就很简单啦,只需要对选区里的每个单元格进行循环,判断一下它的属性是不是合并单元格,如果是的话就拆分。
这里面就再只有一个小事项了,就是根据选项可能需要填充这个拆分过的区域。我们可以根据这个单元格的MergeArea属性来获取整个合并的区域,先记录一下这个区域再拆分。当拆分完成之后就该填充了。这时候我们只需要把合并区域的第一个单元格的内容复制粘贴到整个区域就好了!
好了,我们的所有功能就都实现啦!是不是不算多难又很有用呢?
--------------我是获取工具地址的分割线-----------------
小数点创立了一个VBA脚本长期分享计划,主要是搜集大家平时遇到的场景,需要用VBA解决,大家需要时直接拿来套用,非常方便,这个计划是公益型。
有兴趣的同学可以持续关注我们~
更多内容,关注公众号【Point小数点数据】,回复 “VBA长期分享” ,获取这节课所用的完整工具和代码。
END
POINT.小数点数据
![906b5f03092fea27964c68627ffaf548.png](https://i-blog.csdnimg.cn/blog_migrate/c673acc2c6a103f3d0ebfe592990c08d.jpeg)
长按扫码关注我们
课程 | 社区 | 职场 | 数据
POINT.小数点Excel-VBA课程
(第五期)正式预售
点击图片加入
欢迎支持~期待更多通用脚本☺![e14a1b9534eb5599fad1f3cd1c44bc38.png](https://i-blog.csdnimg.cn/blog_migrate/7b311e125afff67c541789079a9a72eb.png)