欢迎光临散文网 会员登陆 & 注册

ExcelVBA 将每个工作簿指定部门生成独立工作簿

2023-05-24 10:53 作者:孙兴华zz  | 我要投稿

网友提问:

回答网友问题:

因为我在ExcelVBA第三季上讲了字典可以在绝大多数情况下被代替,我肯定不能自己打脸,就算是证明也是证明字典麻烦:)我的思路要做到与众不同。

世界诸国都会按自己的道路方针前进,所以希望提问着讲需求,指定语言,不要指定方法。我们的学术立场不一样。

下面是原表,里面有3个Sheet

您想变成的表是   一班、二班、三班  每个班一个工作簿,每个工作簿里还是这三张表,只是每张表都显示自己班级的数据。

打开一个新的Excel工作簿,进入VBE编译器,复制代码后运行

以下代码在我课程中都有讲过

代码需使用支持 unique函数的 office2019、office2021、office365  中的Excel里运行


每一句代码的解释:

2、指定文件所在文件夹

3、原文件的文件名

5、建工作簿对象,这个对象是打开原文件的对象

6、遍历这个原文件的工作簿里面所有的工作表

7、这个原文件工作簿每张表的最大行

8、将每张表的A2至A列最后一个有内容单元格放入二维数组arr

9、使用unique函数对二维数组去重(office2019\2021\365应该有此函数),生成新的一维数组brr

10、将数组写到写代码的这个工作簿第一张表的A1单元格,由于我们不知道数组有几个元素,所以就扩展数组最大下标的个数做行,列数还是1列

12、关闭工作簿(必需在这里关,不然后面没办法复制一个使用中的工作簿)

14、将写代码的这个工作A1至A列最后一个有内容的单元格放入二维数组crr

15、循环crr的下标

16、crr(i,1)  就是每一个班级

17、原文件的路径

18、我们需要: 一班.xlsx    二班.xlsx   三班.xlsx  的详细路径

19、使用FileCopy 拷贝文件

20、依次打开 一班.xlsx    二班.xlsx   三班.xlsx

21、依次遍历 一班.xlsx    二班.xlsx   三班.xlsx  里面所有工作表

22、对得到的每张表获取最使用行

23、对每张表筛选第一列等于当前班级的

24、把张放每张表在最大使用行的下一行

25、取消每张表的筛选

26、删除每张表从第一行到24行代码没执行前的最大使用行(就是原数据)

28、对每个工作簿保存

29、关闭每个工作簿


运行后我们得到结果

随便打开一个

比速度,那得放到现在主流电脑配置上比,那才叫比速度,不能放到机械硬盘上。现在是2023年,往前推5年,2018年配的3000以内(不含独显和显示器)的办公DIY主机(i3 8100  16G内存 PCIE3.0),在速度上我的代码不输字典。(我测试了30万行左右的数据,百万行ExcelVBA怎么弄都卡,得换工具)

ExcelVBA教程:https://www.bilibili.com/video/BV1rt4y1a72y

ExcelVBA 将每个工作簿指定部门生成独立工作簿的评论 (共 条)

分享到微博请遵守国家法律