ExcelVBA 将每个工作簿指定部门生成独立工作簿
网友提问:







回答网友问题:
因为我在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