簡體   English   中英

如何使用VBA基於列作為鍵連接兩個excel工作表

[英]How to join two excel worksheets based on a column as key using VBA

我不確定要采取什么方法,但想知道我是否可以將兩個 Excel 工作表中的數據連接起來並填充到第三個工作表中,就像我們如何使用 VBA 加入 SQL 一樣。 示例數據如下,我想通過 Emp_id 連接 Sheet1 和 Sheet2 並將結果填充到 Sheet3 中。 我在谷歌上搜索了很多東西,並嘗試了我所知道的一切,但我離得遠了,有人可以對此有所了解或分享一個工作示例,那會很棒。 我仍在嘗試,如果我有解決方案,我會發布。

樣本數據

下面適用於我的,下面的查詢再次用於示例數據。 對於我的實際數據,我必須獲取工作表編號以使用工作表名稱(例如 [Sheet2$] 替換為 [Sheet” & Sheets("Source").Index & "$] 以使用“Source”作為工作表“Sheet2”的位置。

我必須使用 LEFT JOIN,因為我只使用 JOIN 出錯,后來從 Sheet3 中刪除了額外的行,用於在 Sheet1 中不匹配的記錄,如果你想要數據,你可能還必須使用 UNION 函數,因為不支持 FULL JOIN從兩個表。

希望這對某人有幫助...

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.Name & ";" & _
         "Extended Properties=Excel 8.0;"
     .Open
 End With

 Dim rs As ADODB.Recordset
 Set rs = New ADODB.Recordset

 rs.Open "SELECT * FROM [Sheet2$] LEFT JOIN [Sheet1$] ON [Sheet2$].[Emp_id] = [Sheet1$].[Emp_id]", cn

 With Worksheets("Sheet3")
     .Cells(2, 1).CopyFromRecordset rs
 End With

 rs.Close
 cn.Close

 End Sub
cn As New ADODB.Connection 
rec As New ADODB.Recordset
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name

SQLquery = "SELECT [Sheet2$].[Emp_id],[Sheet2$].[Hobies],[Sheet1$].[Salary] FROM [Sheet2$] INNER JOIN [Sheet1$]  ON [Sheet2$].[Emp_id]=[Sheet1$].[Emp_id]"

rec.Open SQLquery, cn, adOpenKeyset, adLockOptimistic
Sheets("Sheet3").Range("A1").CopyFromRecordset rec

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM