【问题标题】:comparing data in two excel columns based on matching excel columns根据匹配的 excel 列比较两个 excel 列中的数据
【发布时间】:2013-03-11 14:04:51
【问题描述】:

假设我有一个格式如下的电子表格:

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  |

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

迈克·琼斯

约翰·史密斯

我正在尝试使用公式来执行此操作,但我想我可能必须使用宏...谁能指出这样的示例?

我正在尝试这些方面的东西:

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

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

【问题讨论】:

    标签: excel vba compare


    【解决方案1】:

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

    1. 创建工作表 3;
    2. 命名单元格 A1 = allnames。将所有名称(表 1 + 表 2)粘贴到 A 列
    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 列并在 C 列粘贴为“值”

    5. "#N/A" 替换为""
    6. ""过滤C列
    7. 在 A 栏查看您想要的结果。

    【讨论】:

      【解决方案2】:

      如果可以在第一张表上插入一列,然后过滤它以查找重复项,那么您可以这样做:

      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 列是您上面的第二个表格。

      【讨论】:

        【解决方案3】:

        这是一些将匹配项存储在工作簿中的短代码。您需要包含对“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 中前两个范围的匹配!

        【讨论】:

          猜你喜欢
          • 2014-10-28
          • 2018-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多