【发布时间】:2014-11-01 00:04:04
【问题描述】:
使用 Excel VBA 我希望能够将 Excel 中的两个表与一个公共键组合在一起。我建议将 ADODB 作为一种方法,但我对任何其他更有效/优雅的方法持开放态度。请参阅下面的最小示例:
我有以下开始...
表 1
A B C
1 type year1 year2
2 aaa 100 110
3 bbb 220 240
4 ccc 304 200
5 ddd 20 30
6 eee 440 20
表 2
A B C
1 type year1 year2
2 bbb 10 76
3 ccc 44 39
4 ddd 50 29
5 eee 22 23
6 fff 45 55
并且想将它结合起来,因此我得到以下结果:
表 3
A B C D E
1 type year1 year2 year1 year2
2 aaa 100 110 0 0
3 bbb 220 240 10 76
4 ccc 304 200 44 39
5 ddd 20 30 50 29
6 eee 440 20 22 23
7 fff 0 0 45 55
已经做了一些谷歌搜索,SQL 类型的外连接似乎很接近,但不知道如何实现它。
下面是目前为止用来尝试和实现它的代码...
Option Explicit
Sub JoinTables()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 8.0;"
.Open
End With
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM [Sheet1$] OUTER JOIN [Sheet2$] ON [Sheet1$].[type] = " & _
"[Sheet2$].[type]", cn
With Worksheets("Sheet3")
.Cells(2, 1).CopyFromRecordset rs
End With
rs.Close
cn.Close
End Sub
【问题讨论】:
-
@Fionnuala 据我记得 ADODB 不支持外部联接,因此指向您的答案的链接在这里并没有真正的帮助
-
@vba4all 带有 Jet 或 ACE 驱动程序的 ADODB 几乎支持 MS Access SQL 支持的任何东西,包括外连接。它已经做了很长时间了。