设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 25865|回复: 61
打印 上一主题 下一主题

多表不重复数据提取(记录集)

[复制链接]
跳转到指定楼层
1#
发表于 2011-1-9 23:08:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       之前,坛友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
复制代码
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +30 收起 理由
pureshadow + 30 我很赞同

查看全部评分

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享1 分享淘帖1 订阅订阅
2#
发表于 2011-1-9 23:12:25 | 只看该作者
先坐个沙发
3#
发表于 2011-1-10 08:21:18 | 只看该作者
抬着板凳围观
4#
发表于 2011-1-10 14:12:38 | 只看该作者
xuexixuexi
5#
发表于 2011-1-10 15:22:30 | 只看该作者
看不懂- -#我好笨哦。。。
6#
发表于 2011-1-10 15:28:21 | 只看该作者
有什么方法可以按照个部门ARTICLE排列数据的么?就是顺序不变,提取。。。
7#
 楼主| 发表于 2011-1-10 17:29:01 | 只看该作者
回复 psj886 的帖子

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

不是这样的。。。 Article和描述是不会重复的,比如:
部门:农产; Article 101;描述:国光苹果。
部门:农产; Article 102;描述:富士苹果。
部门:农产; Article 5001;描述:法国苹果。
部门:农产; Article 5002;描述:日本苹果。
等等。。。 Article和描述是唯一的。
9#
 楼主| 发表于 2011-2-1 19:40:34 | 只看该作者
还是要你的源文件才能处理~~
10#
发表于 2011-4-24 05:49:35 | 只看该作者
抬着板凳围观
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 09:29 , Processed in 0.084680 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表