|
之前,壇友psj886提出如何多表合并數據,我當時回復說,方法很多,而且推薦使用數據透視表來做會相當簡單,先把數據集中起來,然后再用透視表來做,詳見:
http://www.mzhfr.cn/forum.php?mod=viewthread&tid=95948&page=1#pid580077
不過壇友對此似乎不太滿意,小生誠惶誠恐,只好寫一段VBA代碼了,如果您喜歡不妨評下分吧,——負分就不用了,我想,這個帖子也沒那么差吧?(*^__^*) 嘻嘻……)
VBA的思路有兩種,可以考慮高級篩選,不過需要使用循環(huán)語句,可能還要計算位置以便把數據集中在一起,當然這是思路而已,要實現起來并非易事。另一種就簡單多了,那就是即將隆重登場的ADO(ActiveX Data Object)方式了。
我們先假定如果用Access應該怎么處理?導入后聯(lián)合查詢。不錯,那么如果我們能在Excel里模仿這個操作不就可以完成任務了(Roy沾沾自喜地說,“太厲害了,不得不佩服我自己了!保
不過,和Access不同的是,Excel里要先創(chuàng)建相應的組件(數據連接和記錄集),——如果不創(chuàng)建,則需要引用相關的庫。還有一點,在Access里自帶數據連接引擎,但在Excel里需要聲明。
好了,不說那么多,貼上代碼先~~代碼中有些參數恕(例如Cnn.open)我不解釋了!绻袝r間,我將貼一篇相應教程上來供大家參考。
- Sub 數據集VBA()
- '先清空數據以便備用
- Sheets("數據集VBA").Range("A:B").Clear
- '定義組件和SQL語句
- Dim Cnn, Rst As Object
- Dim SSql As String
- '創(chuàng)建數據庫連接和數據集
- Set Cnn = CreateObject("ADODB.connection")
- Set Rst = CreateObject("ADODB.recordset")
- '打開鏈接
- Cnn.Open "Provider=Microsoft.Jet.OleDb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
- '寫入SQL語句。
- SSql = "select Article,描述 from [1$J2:K300]"
- '聯(lián)合查詢,為了提取不重復值,這里沒有使用All謂詞
- SSql = SSql & " Union select Article,描述 from [2$J2:K65536]"
- SSql = SSql & " Union select Article,描述 from [3$J2:K65536]"
- SSql = SSql & " Union select Article,描述 from [4$J2:K65536]"
- Cnn.Execute (SSql)
- '打開數據集
- Rst.Open SSql, Cnn, adOpenKeyset
- '復制數據集到相應的單元格
- Sheets("數據集VBA").Range("A2").CopyFromRecordset Rst
- '關閉數據集和鏈接
- Rst.Close
- Cnn.Close
- '釋放內存
- Set Rst = Nothing
- Set Cnn = Nothing
- End Sub
復制代碼 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊
x
評分
-
查看全部評分
|