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

ExcelVBA 放弃字典!用ADO+SQL组表与分表

2023-10-20 09:46 作者:孙兴华zz  | 我要投稿

网友提问:

回答网友问题:

三十年前大家都说好了,要让一部分人先富起来,先富起来的人再帮助没有富起来的人。

串台了!重来!

三年前(2020年)我跟大家说好了,在绝大多数情况下,VBA中的字典是没必要使用的。

今天我用的方法,你们可以在一个工作簿里准备10张表,然后每张表存104万行数据

你们可以找一个字典的方法,再用我今天提供的方法对比,看看谁快!

估计字典方法可能会让你的电脑卡住不动

在C:\孙兴华  目录下有一个   孙兴华.xlsx 的工作簿

里面有2张表


1、不打开指定工作簿获取里面的工作表名称:2021年9月29日我讲过

https://www.bilibili.com/video/BV19R4y1p7vg

但是我们前期绑定和后期绑定的方法都要会

在桌面上有一个  汇总.xlsx的空白工作簿

打开  汇总.xlsx  代码如下

返回结果

友情提示:$是否替换掉,根据具体使用情况而定。比如我要在ExcelVBA中使用SQL语句,那就无需替换掉。

2、一个工作簿可以看成一个数据库,N张工作表可以看成数据库中的每张表

select * from 表1

union all

select * from 表2

.......

我们需要将每张表拼接的方法如上所示

于是,我们在刚才的代码中加入拼接SQL语句的代码

返回结果

3、拿到姓名唯一值的SQL语句

题外话:给培训机构讲师解释一下什么是唯一值,因为你们问过我,例如

张三、张三、张三、开飞机地张三

唯一值是:张三、开飞机地张三

刚才我们用union all 得到了一个工作簿N张表组合到一起的sql语句

我们可以通过以下方法得到姓名的不重复值

select 姓名 from (刚才那个sql语句) group by 姓名

于是我们在刚才的代码中加入内容

返回结果

4、遍历出来每个姓名,这个遍历出来的每个姓名可以做筛选union all 连接的大表,同时也可以新建工作表。

我们在刚才的代码中加入新内容

返回结果

5、先利用刚才遍历出来的姓名新建工作表

友情提示:我记忆中一个工作簿好像是可以放255个工作表,自己有多少个姓名,心中要有数。

修改后的代码如下:

ExcelVBA第二季 笔记4.2讲的

返回结果:

6、我们要先拿到每个人对应数据的sql语句

select * from 表 where 姓名 = "张三"

select * from 表 where 姓名 = "李四"

select * from 表 where 姓名 = "王五"

.....

于是我们在刚才的代码中添加内容

返回结果

7、在union all 生成的大表中,分别筛选张三,李四,王五,并分别放到张三、李四、王五这3张表中

上面都是每个步骤告诉大家返回的是什么,如果不想学,只想用,只需要这个最终代码就可以了。

返回结果

以上所用知识都是我讲过的

关于不打开工作簿遍历其工作表名称,于2021年9月21日讲的

https://www.bilibili.com/video/BV19R4y1p7vg

关于在ExcelVBA中使用SQL语句,在ExcelVBA第二季第21集讲的

https://www.bilibili.com/video/BV1rt4y1a72y

SQL语句用的都是最基础的

https://www.bilibili.com/video/BV1Dk4y1d71j


ExcelVBA 放弃字典!用ADO+SQL组表与分表的评论 (共 条)

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