嘿嘿嘿,我觉得VBA最好玩的一点是:它非常接地气!VBA是什么?就是用敲代码的方式使用EXCEL呗,一切报表用上VBA,简直分分钟搞定呀!
本篇想要分享的是我们工作中经常会用到的工作表拆分大法,代码具有普适性,可以存成xlsm文件随时调用。
首先看一下成果~
1.梳理代码的结构
从gif图可以知道,点击按钮后首先弹出对话框询问按哪一列进行分列,之后除了总表外的所有表格会被删除,并生成新的表格,最终弹出信息框提示运行的时间。由此可以知道代码的结构为:
- 设置对话框获取筛选列。
- 删除除了总表之外的表格。
- 根据筛选列新建表格,并设置表格名称为可筛选项。
- 将筛选得到的数据复制到对应表格里。
- 计算代码运行时间,弹出信息框。
2.哟西,开始写代码吧!
2.1. 设置对话框
- 首先,记录代码开始运行的timer为t,以便之后计算运行的时间。
- 因为之后的代码会多次用到总表,所以为了方便引用,设置变量sht0为当前工作表。
- 用户输入inputbox的值将用于列的筛选,定义其为变量l。此外,为了引导用户正确输入,设置if函数来进行提示。
注:这里列的最大数设置为Z,如果工作表列数多于Z,需要进行更改。
2.2.删除多余的表格
- 平时Excel删除表格都会弹出警告框,所以在删除表格之前需要先设置displayalerts为false,不然每删除一个表就弹出来一个警告框,根本没办法好好玩耍了呢~
- 因为我们不删除总表,为保险起见,引入了两个if判断,通过判断表格数量是否大于1和表格名称是否为总表名称进行for循环。
2.3.创建新表格
- 为了以筛选列的非重复值创建表格,避免创建重名表格,所以在创建之前,需要先判断是否已存在该表格,以k作为判断结果,再创建新表格。
2.4.填充数据到对应表格
- 使用autofilter进行筛选之后,复制数据到表格中,任务完成。
- 工作完成返回总表,并设置msgbox,全部搞定~
3.代码文件
需要代码的童鞋可以移步腾讯文档~
https://docs.qq.com/doc/DVHJPRmtSYlNqT051