|
之前,坛友psj886提出如何多表合并数据,我当时回复说,方法很多,而且推荐使用数据透视表来做会相当简单,先把数据集中起来,然后再用透视表来做,详见:
http://www.office-cn.net/forum.php?mod=viewthread&tid=95948&page=1#pid580077
不过坛友对此似乎不太满意,小生诚惶诚恐,只好写一段VBA代码了,如果您喜欢不妨评下分吧,——负分就不用了,我想,这个帖子也没那么差吧?(*^__^*) 嘻嘻……)
VBA的思路有两种,可以考虑高级筛选,不过需要使用循环语句,可能还要计算位置以便把数据集中在一起,当然这是思路而已,要实现起来并非易事。另一种就简单多了,那就是即将隆重登场的ADO(ActiveX Data Object)方式了。
我们先假定如果用Access应该怎么处理?导入后联合查询。不错,那么如果我们能在Excel里模仿这个操作不就可以完成任务了(Roy沾沾自喜地说,“太厉害了,不得不佩服我自己了。”)?
不过,和Access不同的是,Excel里要先创建相应的组件(数据连接和记录集),——如果不创建,则需要引用相关的库。还有一点,在Access里自带数据连接引擎,但在Excel里需要声明。
好了,不说那么多,贴上代码先~~代码中有些参数恕(例如Cnn.open)我不解释了。——如果有时间,我将贴一篇相应教程上来供大家参考。
- Sub 数据集VBA()
- '先清空数据以便备用
- Sheets("数据集VBA").Range("A:B").Clear
- '定义组件和SQL语句
- Dim Cnn, Rst As Object
- Dim SSql As String
- '创建数据库连接和数据集
- 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]"
- '联合查询,为了提取不重复值,这里没有使用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
评分
-
查看全部评分
|