VBA入门到进阶常用知识代码总结73

本文介绍了如何使用VBA结合SQL在Excel中进行多表合并、汇总和对比操作。通过实例展示了Union All、Inner Join、Left Join等SQL语句的运用,帮助读者从入门到进阶掌握VBA进行高级查询的技术。

第73集 SQL高级查询技术
357、 多表合并汇总
Union all,Union多表合并
类模块中:
Sub 执行筛选(sq, Rg As String)
Dim conn As New Connection
With ActiveSheet 'Sheets(“sheet1”)
.Range(Rg).Resize(100, 7) = “”
conn.Open “provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 8.0;data source=” & ThisWorkbook.FullName
.Range(Rg).CopyFromRecordset conn.Execute(sq)
End With
conn.Close
Set conn = Nothing
End Sub
模块中:
Union AlL 多个select查询结果合并在一起,加ALL不进行去重,不加进行去重
Sub 合并工作表数据()
Dim data As New 类1
Dim sql As String
sql = “select * from [Sheet1a:c]unionallselect∗from[sheet2a:c] union all select * from [sheet2a:c]unionallselectfrom[sheet2a:c]”
data.执行筛选 sql, “a2”
End Sub

Sub 合并工作表数据2()
Dim data As New 类1
Dim sql As String
sql = “select * from [Sheet1a:c]unionselect∗from[sheet2a:c] union select * from [sheet2a:c]unionselectfrom[sheet2a:c]”
data.执行筛选 sql, “a2”
End Sub
查找两个表中相同的
Select 字段 from 表1,表2 where 表1.字段=表2.字段
Sub 列出相同()
Dim data As New 类1
Dim sql As String
sql = “select [Sheet1a:c].∗from[Sheet1a:c].* from [Sheet1a:c].from[Sheet1a:c],[Sheet2a:c]where[Sheet1a:c] where [Sheet1a:c]where[Sheet1a:c].类别=[Sheet2$a:c].类别”
data.执行筛选 sql, “a2”
End Sub

Select 字段 from 表1 Inner Join 表2 on 条件
Sub 列出相同2()
Dim data As New 类1
Dim sql As String
sql = “select [Sheet1].∗,[sheet2].*,[sheet2].,[sheet2].库别 from [Sheet1]InnerJoin[sheet2] Inner Join [sheet2]InnerJoin[sheet2] on [Sheet1].类别=[sheet2].类别=[sheet2].=[sheet2].类别”
data.执行筛选 sql, “a2”
End Sub

'两表汇总
Sub 汇总()
Dim data As New 类1
Dim sql As String
Dim sq As String
sql = “select * from [sheet1a:c]unionallselect∗from[sheet2a:c] union all select * from [sheet2a:c]unionallselectfrom[sheet2a:c]”
sq = “select 类别,sum(数量),sum(金额) from (” & sql & “) group by 类别”
data.执行筛选 sq, “a2”
End Sub


Sub 合并()
Dim data As New 类1
Dim sql As String
sql = “select [Sheet1].∗,[sheet2].*,[sheet2].,[sheet2].库别 from [Sheet1]leftJoin[sheet2] left Join [sheet2]leftJoin[sheet2] on [Sheet1].类别=[sheet2].类别=[sheet2].=[sheet2].类别”
data.执行筛选 sql, “a2”
End Sub

JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行,可惜的是在EXCEL VBA中不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值