如何使用VBA基于列作为键来连接两个excel工作表

时间:2016-06-04 01:26:38

标签: excel-vba join vba excel

我不知道采取什么方法,但想知道我可以从两个excel表中加入数据并填入第三张表,就像我们如何使用VBA加入SQL一样。示例数据如下,我想通过Emp_id加入Sheet1和Sheet2,并在Sheet3中填充结果。我已经google了很多,并尝试了我所知道的任何东西,但我无处可去得到这个,有人可以对此有所了解或分享一个工作的例子,这将是伟大的。我还在努力,如果我得到解决方案,我会发帖。

Sample Data

2 个答案:

答案 0 :(得分:0)

以下是我的工作,再次查询以下是示例数据。对于我的实际数据,我必须得到工作表编号以使用工作表名称(示例[Sheet2 $]替换为[Sheet]& Sheets(“Source”)。索引和“$”使用“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

答案 1 :(得分:0)

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