楼主 wise |
Q: 如何用VBA+SQL筛选多个工作表的数据? A:具体看下面的例子说明,关键处有两处: 一、循环处:For i = 1 To Sheets.Count - 1,这样可以循环多个工作表; 二、多个工作表的SQL连接:sq = sq & "select * from [" & Sheets(i).Name & "$] where 积分 > 10 " & " union all " ,这个语句,可以不受工作表名称的约束。
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略显繁琐,但多个表查询,只能结合了。 |