ExcelVBA 放棄字典!用ADO+SQL組表與分表
網(wǎng)友提問:

回答網(wǎng)友問題:
三十年前大家都說好了,要讓一部分人先富起來,先富起來的人再幫助沒有富起來的人。
串臺(tái)了!重來!
三年前(2020年)我跟大家說好了,在絕大多數(shù)情況下,VBA中的字典是沒必要使用的。
今天我用的方法,你們可以在一個(gè)工作簿里準(zhǔn)備10張表,然后每張表存104萬行數(shù)據(jù)
你們可以找一個(gè)字典的方法,再用我今天提供的方法對(duì)比,看看誰快!
估計(jì)字典方法可能會(huì)讓你的電腦卡住不動(dòng)。
在C:\孫興華? 目錄下有一個(gè)? ?孫興華.xlsx 的工作簿

里面有2張表


1、不打開指定工作簿獲取里面的工作表名稱:2021年9月29日我講過
https://www.bilibili.com/video/BV19R4y1p7vg
但是我們前期綁定和后期綁定的方法都要會(huì)
在桌面上有一個(gè)? 匯總.xlsx的空白工作簿

打開? 匯總.xlsx? 代碼如下
返回結(jié)果

友情提示:$是否替換掉,根據(jù)具體使用情況而定。比如我要在ExcelVBA中使用SQL語句,那就無需替換掉。
2、一個(gè)工作簿可以看成一個(gè)數(shù)據(jù)庫,N張工作表可以看成數(shù)據(jù)庫中的每張表
select * from 表1
union all
select * from 表2
.......
我們需要將每張表拼接的方法如上所示
于是,我們?cè)趧偛诺拇a中加入拼接SQL語句的代碼
返回結(jié)果

3、拿到姓名唯一值的SQL語句
題外話:給培訓(xùn)機(jī)構(gòu)講師解釋一下什么是唯一值,因?yàn)槟銈儐栠^我,例如
張三、張三、張三、開飛機(jī)地張三
唯一值是:張三、開飛機(jī)地張三
剛才我們用union all 得到了一個(gè)工作簿N張表組合到一起的sql語句
我們可以通過以下方法得到姓名的不重復(fù)值
select 姓名 from (剛才那個(gè)sql語句) group by 姓名
于是我們?cè)趧偛诺拇a中加入內(nèi)容
返回結(jié)果

4、遍歷出來每個(gè)姓名,這個(gè)遍歷出來的每個(gè)姓名可以做篩選union all 連接的大表,同時(shí)也可以新建工作表。
我們?cè)趧偛诺拇a中加入新內(nèi)容
返回結(jié)果

5、先利用剛才遍歷出來的姓名新建工作表
友情提示:我記憶中一個(gè)工作簿好像是可以放255個(gè)工作表,自己有多少個(gè)姓名,心中要有數(shù)。
修改后的代碼如下:
ExcelVBA第二季 筆記4.2講的
返回結(jié)果:

6、我們要先拿到每個(gè)人對(duì)應(yīng)數(shù)據(jù)的sql語句
select * from 表 where 姓名 = "張三"
select * from 表 where 姓名 = "李四"
select * from 表 where 姓名 = "王五"
.....
于是我們?cè)趧偛诺拇a中添加內(nèi)容
返回結(jié)果

7、在union all 生成的大表中,分別篩選張三,李四,王五,并分別放到張三、李四、王五這3張表中
上面都是每個(gè)步驟告訴大家返回的是什么,如果不想學(xué),只想用,只需要這個(gè)最終代碼就可以了。
返回結(jié)果




以上所用知識(shí)都是我講過的
關(guān)于不打開工作簿遍歷其工作表名稱,于2021年9月21日講的
https://www.bilibili.com/video/BV19R4y1p7vg
關(guān)于在ExcelVBA中使用SQL語句,在ExcelVBA第二季第21集講的
https://www.bilibili.com/video/BV1rt4y1a72y
SQL語句用的都是最基礎(chǔ)的
https://www.bilibili.com/video/BV1Dk4y1d71j