基于匹配的excel列比较两个excel列中的数据

时间:2013-03-11 14:04:51

标签: excel vba compare

所以说我有一个以下格式的电子表格:

Sheet 1                    |  Sheet 2
name          email        |  name          email
Mike Jones    mikej@mail   |  John Smith    jsmith@mail    
John Smith    johns@mail   |  Mike Jones    mjones@mail    
John Public   jpublic@mail |  Chris Paul    cpaul@mail        
Chris Paul    cpaul@mail   |  John Public   jpublic@mail
Jim Abram     jambram@mail |
Tim Toole     ttoole@mail  |

我想比较具有匹配名称的条目的电子邮件,并显示不匹配的名称(如果需要,我可以将所有数据放在一张纸上),所以基本上,这将输出:

  迈克琼斯

     

John Smith

我试图用公式做到这一点,但我想我可能不得不用一个宏...有人能指出我这样的例子吗?

我正在尝试这些方面:

=IF(ISERROR(MATCH(Sheet1!A1,Sheet2!$A$1:$A$5,0)),(IF(ISERROR(MATCH(Sheet1!B1,Sheet2!$B$1:$B$5,0)), Sheet1!A1, ""),"")

并且真的想尝试将其表达为宏。

3 个答案:

答案 0 :(得分:0)

如果可以在第一张纸上插入一列,然后对其进行过滤以找到重复项,那么您可以这样做:

name        email           Duplicate Count
Mike Jones  mikej@mail          0
John Smith  johns@mail          0
John Public jpublic@mail        1
Chris Paul  cpaul@mail          1
Jim Abram   jambram@mail        0
Tim Toole   ttoole@mail         0

重复计数列具有以下内容:

=SUMPRODUCT((D:D=A2)*1,(B2=E:E)*1)

如果列D和列E是您上面的第二个表。

答案 1 :(得分:0)

这是一些将匹配存储在工作簿中的简短代码。您需要包含对“Microsoft Scripting Runtime”的引用。

Sub Compare(rng1 As Range, rng2 As Range, rngTarget As Range)
    Dim d As New Scripting.Dictionary
    Dim rngTemp As Range
    Const cMailCol As Long = 2

    For Each rngTemp In rng1.Columns(1).Cells
        d.Add rngTemp.Offset(cMailCol - 1).Value, rngTemp.Value
    Next

    For Each rngTemp In rng2.Columns(1).Cells
        If d.Exists(rngTemp.Offset(cMailCol - 1).Value) Then
            rngTarget = d(rngTemp.Offset(cMailCol - 1).Value)
            Set rngTarget = rngTarget.Offset(1)
        End If
    Next
End Sub

将其称为Compare [A2:B7], [D2:E5], [G2],以便将前两个范围的匹配项存储在G2中!

答案 2 :(得分:0)

这是一个快速简单的公式解决方案的尝试!!

  1. 创建表3;
  2. 名称单元格A1 =所有名称。在A列上粘贴所有名称(表1 +表2)
  3. 名称单元格B1 =电子邮件。
    输入B2 = IF(VLOOKUP(A2,Sheet1!$A$1:$B$7,2,0<>VLOOKUP(A2,Sheet2!$A$1:$I$5,2,0),VLOOKUP(A2,Sheet1!$A$1:$B$7,2,0),"")

  4. 复制列B并在collumn C

  5. 粘贴为“值”
  6. "#N/A"替换为""
  7. ""
  8. 过滤C列
  9. 在COLUMN A。看到你想要的结果。