Office中国论坛/Access中国论坛

标题: 多表不重复数据提取(记录集) [打印本页]

作者: roych    时间: 2011-1-9 23:08
标题: 多表不重复数据提取(记录集)
       之前,坛友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)我不解释了。——如果有时间,我将贴一篇相应教程上来供大家参考。
  1. Sub 数据集VBA()
  2. '先清空数据以便备用
  3. Sheets("数据集VBA").Range("A:B").Clear
  4. '定义组件和SQL语句
  5. Dim Cnn, Rst As Object
  6. Dim SSql As String
  7. '创建数据库连接和数据集
  8. Set Cnn = CreateObject("ADODB.connection")
  9. Set Rst = CreateObject("ADODB.recordset")
  10. '打开链接
  11. Cnn.Open "Provider=Microsoft.Jet.OleDb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
  12. '写入SQL语句。
  13. SSql = "select Article,描述 from [1$J2:K300]"
  14. '联合查询,为了提取不重复值,这里没有使用All谓词
  15. SSql = SSql & " Union select Article,描述 from [2$J2:K65536]"
  16. SSql = SSql & " Union select Article,描述 from [3$J2:K65536]"
  17. SSql = SSql & " Union select Article,描述 from [4$J2:K65536]"
  18. Cnn.Execute (SSql)
  19. '打开数据集
  20. Rst.Open SSql, Cnn, adOpenKeyset
  21. '复制数据集到相应的单元格
  22. Sheets("数据集VBA").Range("A2").CopyFromRecordset Rst
  23. '关闭数据集和链接
  24. Rst.Close
  25. Cnn.Close
  26. '释放内存
  27. Set Rst = Nothing
  28. Set Cnn = Nothing
  29. End Sub
复制代码

作者: ui    时间: 2011-1-9 23:12
先坐个沙发
作者: xuwenning    时间: 2011-1-10 08:21
抬着板凳围观
作者: ZBJKJH    时间: 2011-1-10 14:12
xuexixuexi
作者: psj886    时间: 2011-1-10 15:22
看不懂- -#我好笨哦。。。
作者: psj886    时间: 2011-1-10 15:28
有什么方法可以按照个部门ARTICLE排列数据的么?就是顺序不变,提取。。。
作者: roych    时间: 2011-1-10 17:29
回复 psj886 的帖子

这里是根据当时的例子来考虑的,只有四张表,把不重复的字段汇总成两列而已。如果按你说的方法,可能会出现:
部门1  Article1 描述1
部门1  Article2 描述2
部门2  Article1 描述1
部门2  Article3 描述3
……………………………
显然Aticle1在两个部门都有,不符合你所说的不重复值的提取噢,如果这不算不重复是可以实现的
作者: psj886    时间: 2011-2-1 12:48
回复 roych 的帖子

不是这样的。。。 Article和描述是不会重复的,比如:
部门:农产; Article 101;描述:国光苹果。
部门:农产; Article 102;描述:富士苹果。
部门:农产; Article 5001;描述:法国苹果。
部门:农产; Article 5002;描述:日本苹果。
等等。。。 Article和描述是唯一的。

作者: roych    时间: 2011-2-1 19:40
还是要你的源文件才能处理~~
作者: joyark    时间: 2011-4-24 05:49
抬着板凳围观

作者: xie62    时间: 2011-4-24 07:45

作者: zczc123    时间: 2011-6-19 18:40
学习
作者: joyark    时间: 2011-6-23 00:50
支持一下楼主!
             顶顶顶顶顶顶顶顶顶顶顶。。。。。。。。。!!!!!!!!!!!!!!!!!!!!

作者: kent_73    时间: 2011-7-25 14:14
学习一下
作者: yori2007    时间: 2011-7-26 14:04

作者: ly    时间: 2011-7-26 20:29
用Access的思路,支持!学习了!
作者: roych    时间: 2011-7-26 22:27
ly 发表于 2011-7-26 20:29
用Access的思路,支持!学习了!

可能和你不同,Excel编程是在学了Access之后才开始的。EH里好像见过一个ID……不会就是你吧?
作者: ly    时间: 2011-7-28 20:15
roych 发表于 2011-7-26 22:27
可能和你不同,Excel编程是在学了Access之后才开始的。EH里好像见过一个ID……不会就是你吧?

正是在下,鄙人愚笨,在EH和Access-CN学习多年未有建树,希望版主多多关照!谢谢!
作者: roykonev    时间: 2011-9-1 11:52
好厉害,来学习下
作者: icenotcool    时间: 2011-11-27 20:39
还是要你的源文件才能处理~~
作者: 阳城    时间: 2011-11-28 14:30
学习 加路过
作者: ma_myh    时间: 2011-12-5 08:40
来揍个人气
作者: wanghaijuan@    时间: 2011-12-7 16:39
哥,太深奥了,我看不懂呃
作者: dlack    时间: 2013-5-3 12:53
正需要,谢谢了!!!
作者: yanghua1900363    时间: 2013-5-4 15:24
也来看看
作者: 156595311    时间: 2013-6-16 17:32
我要一个。
作者: 156595311    时间: 2013-6-16 17:42
roych 发表于 2011-1-10 17:29
回复 psj886 的帖子

这里是根据当时的例子来考虑的,只有四张表,把不重复的字段汇总成两列而已。如果按你 ...

提取多表不重复,怎么不能把标题也标上去的?提取只有数据,没有标题,不太理想。
作者: 阳城    时间: 2013-6-20 21:11
学习

作者: wang1950317    时间: 2013-12-26 15:43
学习学习!
作者: gl_zhangt    时间: 2014-3-15 21:16
多谢楼主无私分享
作者: zpy2    时间: 2014-7-7 05:27
学习了!!赞!!
作者: sunwrsun    时间: 2015-1-9 00:22
看看
作者: accessfun12    时间: 2015-1-15 21:48
thank

作者: 山东小妮子    时间: 2015-2-1 20:36
取经
作者: jiangbo0505    时间: 2015-5-13 10:25
支持,下载学习
作者: sophie247_wei    时间: 2015-6-1 15:59
学习学习
作者: shawncharly    时间: 2015-7-20 09:32
看看
作者: shawncharly    时间: 2015-7-20 16:03
请问cnn,rst是什么意思。代码里面好多都不懂,大神能解释地更清楚一些么

作者: lkkl66    时间: 2015-8-24 20:37
学习使人进步!!!
作者: wzs19700724    时间: 2015-10-7 15:34
有附件吗兄弟

作者: rio123    时间: 2015-12-25 17:21
学习了
作者: rio123    时间: 2015-12-25 17:27
谢谢,非常实用
作者: 鄱湖人2012    时间: 2016-5-6 20:31
学习
作者: 李力军2    时间: 2016-6-16 17:01
好,收藏了
作者: lms008008    时间: 2016-11-15 15:38
学习
作者: qq496805224    时间: 2016-12-15 15:04
大神真6
作者: 2677598003    时间: 2017-1-24 07:42
学习
作者: opelwang    时间: 2017-7-29 20:04
这个不错,值得学习。
作者: ztaccess    时间: 2017-8-12 23:29
感谢版主热心提供教程
作者: ardu95    时间: 2017-11-29 06:28
  学习 谢谢分享
作者: gaofei186    时间: 2018-1-18 08:49
看看一下
作者: apple123    时间: 2018-3-11 03:34
学习学习,谢谢楼主
作者: apple123    时间: 2018-3-11 03:35
学习学习,谢谢楼主分享
作者: 打字比你快    时间: 2019-1-8 21:36
看看。。。。
作者: 六月雪    时间: 2019-9-8 18:00
哦哦哦哦哦哦
作者: Figueroa    时间: 2019-9-12 15:21
感谢分享,能看懂你的代码就好了,继续学习,祝中秋快乐。
作者: wuwu200222    时间: 2020-4-24 15:57
学习
作者: lihonj    时间: 2020-7-25 07:23
学习中,谢谢
作者: wulai8377    时间: 2021-7-31 10:57
急需,学习学习
作者: liumporite    时间: 2022-4-10 20:42
谢谢 看看 学习一下




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3