【问题标题】:Comparing lists of names in Excel, accounting for duplicate last names比较 Excel 中的姓名列表,考虑重复的姓氏
【发布时间】:2011-01-31 11:10:37
【问题描述】:

我在 Excel '07 中有两个名称列表。每个文件中有两列:名字和姓氏。我希望能够分辨出每个列表中的哪些名称(名称 = 第一个,最后一个)出现在另一个列表中。我能想到的方法中没有一种方法一次能解释多于一列——例如,我可以看到有多少个“Smith”,或者有多少个“Albert”,但我不知道有多少“ Albert Smith"s there are.

想法?

编辑:显然我可以连接,但我希望这种方法可以推广到多于两列的数据。

【问题讨论】:

    标签: excel duplicates


    【解决方案1】:

    最简单的方法是使用 CONCATENATE 为两个列表创建第三列,然后使用这个新列进行 vlookup。

    【讨论】:

      【解决方案2】:

      不幸的是,这是 Excel 中一项非常常见的任务,标准答案是 Joshua Smith 所说的 - 通过连接可用列来构建组合键。如果您担心冲突(例如,多个列的直接连接可能会在相同的输出中留下不同的值),例如以下内容,请使用分隔符(例如管道字符 |)。

      
      Col A    Col B   Col C  Combined Key
       aaa      bbb     ccc    aaabbbccc
       aa       aa      aaa    aaaaaaa    -- Bad match...
       aaa      a       aaa    aaaaaaa    -- Bad match...
      

      当然,您可以编写一个自定义宏函数来为您执行此操作。逻辑类似于VLOOKUP:

      公共函数 Vmatch(ByVal lookFor As Range, ByVal lookIn As Range) As String '确保列数匹配(至少!) If lookFor.Columns.Count lookIn.Columns.Count Then '哎呀... Vmatch = "错误:列数不匹配" 退出函数 万一 '开始在目标范围内寻找 '与源范围匹配 Dim blnFound 作为布尔值 Dim blnRowOK 作为布尔值 blnFound = 假 将 iCol 调暗为整数 将 iRow 变暗 将 numCols 调暗为整数 numCols = lookFor.Columns.Count '遍历所有行 对于 iRow = 1 查看In.Rows.Count '假设当前行可能没问题... blnRowOK = 真 '遍历列 对于 iCol = 1 到 numCols '只测试不匹配 If lookFor.Cells(1, iCol).Value lookIn.Cells(iRow, iCol).Value Then blnRowOK = 假 退出 万一 下一个 '如果行仍然没问题,我们找到了匹配! 如果 blnRowOK 那么 blnFound = True 退出 万一 下一个 '如果 blnFound 为真,我们找到了一个匹配 如果 blnFound 则 Vmatch = "匹配" 别的 Vmatch = "不匹配" 万一 结束功能

      注意:上面的函数有效并且不易受到“误报”的影响 - 它也会尝试在匹配时跳出以降低效率,但我不能保证它在所有情况下都有效。

      要使用该函数,您可以将给定行上所有列的范围作为lookFor 引用,并在lookIn 中引用所有可能匹配行的整个范围,例如=VMatch(A1:C1,Sheet2!A1:C29) 如果您匹配的内容在当前工作表单元格 A1:C1 上,而其他数据集在 Sheet2 上,从第一行到第 29 行。

      【讨论】:

        【解决方案3】:

        更新:想通了! Sumproduct 为我完成了所有这些工作。这是一个公式:

        =SUMPRODUCT(($G$8:$G$110=C28)*($F$8:$F$110=D28))
        

        这假定参考名字存储在 G 中,姓氏存储在 F 中,并且我要查找的名称分别存储在 C(名字)和 D(姓氏)中。输出为 1 表示匹配,0 表示不匹配。仅当相邻单元格匹配时才产生匹配。

        【讨论】:

          猜你喜欢
          • 2016-02-22
          • 1970-01-01
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多