匹配两个excel工作簿之间的记录

时间:2016-01-26 20:37:50

标签: excel

Excel文件“A”有650行,每行包含A列中的唯一ID代码。我想在Excel文件“B”中找到650个唯一ID代码,其中包含2500行和相同的唯一标识符代码列。我想将这些记录返回到新表。我几乎尝试了每一个查找,匹配和索引,似乎无法得到我想要的东西。

1 个答案:

答案 0 :(得分:0)

如果您不介意使用宏而不是工作表公式,那么这很容易实现。

注意:

  • 假设:两组数据分别位于名为A和B的工作表上的同一工作簿中
  • 假设:要匹配的列在两个工作表上都称为ID
  • 假设:输出应放在名为C
  • 的工作表上
  • 在运行宏
  • 之前,必须将工作簿另存为.xlsm文件

使用Alt-F11转到Visual Basic编辑器,选择“插入”>然后模块粘贴以下代码:

Option Explicit

Sub cross_ref()

Dim cn As Object
Set cn = CreateObject("ADODB.Connection")

With cn
   .Provider = "Microsoft.ACE.OLEDB.12.0"
   .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=""Excel 12.0 Macro;IMEX=1;HDR=YES"";"
    .Open
End With

Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")

rs.Open "SELECT [B$].* " & _
    "FROM [A$] INNER JOIN [B$] " & _
    "ON [A$].[ID] = [B$].[ID];", cn

Dim sFieldName As String
Dim fld As Object
Dim i As Integer

With ThisWorkbook.Worksheets("C")
    .UsedRange.ClearContents
    i = 0
    For Each fld In rs.Fields
        i = i + 1
        .Cells(1, i).Value = fld.Name
    Next fld
    .Cells(2, 1).CopyFromRecordset rs
    .UsedRange.EntireColumn.AutoFit
End With

rs.Close
cn.Close

End Sub

现在保存工作簿并通过将光标放在宏中的任意位置并单击“播放”按钮(或按F5)来运行宏

宏连接A和B中的所有行(FROM [A$] INNER JOIN [B$]部分),这些行具有匹配的ID值(ON [A$].[ID] = [B$].[ID]部分)并输出B中匹配的所有行( SELECT [B$].*部分)。宏的其余部分只是设置连接,输出数据并在最后整理