ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > SQL in Excel > 如何用VBA+SQL筛选多个工作表的数据?

如何用VBA+SQL筛选多个工作表的数据?

作者:绿色风 分类: 时间:2022-08-17 浏览:161
楼主
wise
Q: 如何用VBA+SQL筛选多个工作表的数据?
A:具体看下面的例子说明,关键处有两处:
一、循环处:For i = 1 To Sheets.Count - 1,这样可以循环多个工作表;
二、多个工作表的SQL连接:sq = sq & "select * from [" & Sheets(i).Name & "$] where 积分 > 10 " & " union all "  ,这个语句,可以不受工作表名称的约束。

  1. Sub a()
  2. Range("A2:L1000").ClearContents '清空A2:L1000区域的数据
  3. Set conn = CreateObject("adodb.connection") '创建ADO链接方式
  4. conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName '打开数据源链接
  5. For i = 1 To Sheets.Count - 1 '循环第一个到倒数第二个工作表
  6.   sq = sq & "select * from [" & Sheets(i).Name & "$] where 积分 > 10 " & " union all " '每个数据表的符合积分大于10分的数据都进行连接起来
  7. Next i
  8. sq = Left(sq, Len(sq) - 11) '因为循环倒数第二个工作表时,sq语句最后还是链接到 union all ,一共有11个字符,这时要提取sq字符串中不包含最后11个字符的字符串
  9. [A2].CopyFromRecordset conn.Execute(sq) '在A2执行该SQL语句,并且使用了CopyFromRecordset执行方法
  10. conn.Close
  11. Set conn = Nothing
  12. End Sub


2010世界杯预选赛.rar
2楼
aluxlion
看不懂,努力中
3楼
sedneyfan
不错,第一次看到SQL应用于Excel。
4楼
hyl_2010
学习一下版主的代码,把字段名也用代码加入
Sub a()
    Range("A1:L1000").ClearContents    '清空A2:L1000区域的数据
    Set Conn = CreateObject("adodb.connection")    '创建ADO链接方式
    Set rs = CreateObject("adodb.recordset")
    Conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName    '打开数据源链接
    For i = 1 To Sheets.Count - 1    '循环第一个到倒数第二个工作表
        Sq = Sq & "select * from [" & Sheets(i).Name & "$] where 积分 > 10 " & " union all "    '每个数据表的符合积分大于10分的数据都进行连接起来
    Next i
    Sq = Left(Sq, Len(Sq) - 11)    '因为循环倒数第二个工作表时,sq语句最后还是链接到 union all ,一共有11个字符,这时要提取sq字符串中不包含最后11个字符的字符串
    Set rs = Conn.Execute(Sq)
    For i = 1 To rs.Fields.Count                              '把选取的字段名写到表格
        Sheets("查询").[a1].Cells(1, i) = rs.Fields(i - 1).Name
    Next
    Sheets("查询").[A2].CopyFromRecordset rs    '在A2执行该SQL语句,并且使用了CopyFromRecordset执行方法
    Conn.Close
    Set Conn = Nothing
End Sub
5楼
童言无忌
sql很简单,结合vab略显繁琐,但多个表查询,只能结合了。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap