【问题标题】:Excel: Count of unique items while ignoring junk duplicatesExcel:忽略垃圾重复项的唯一项目计数
【发布时间】:2015-06-06 09:09:07
【问题描述】:

我有一个包含 ID 的列,我只需要计算唯一 ID。问题是并非所有行都有唯一的 ID,因此这些行的垃圾代码为 99999。有时 ID 中可能会有文本,看起来像这样:D-00000

现在为了得到一个粗略的总数,我计算整个列表并减去 99999 的计数,但原始计数中有常规重复项,不是 99999 代码,所以我的计数太高了。

我不能只从总数中减去重复计数,因为 99999 将与标准重复计数。

以下是前 25 个值的示例:

50658 48762 8536 99999 D-33667 99999 50659 50660 3684 898 34157 99999 D-52412 52439 99999 99999 99999 45216 31718 31718 50664 50665 99999 99999 34171

在这 25 个中,有 8 个 99999。在剩下的 17 个中,有一个重复项(31718 有两次),这意味着唯一计数为 16。

我很确定我可以通过创建一个额外的列并使用 IF 语句忽略 99999 但复制其他任何内容来做到这一点,然后对该列进行唯一项目计数,但我真的很想知道这是否可能只有一个公式,因为它是一个强大的工具(一个公式,可以在任何需要的任何时间在任何工作表上使用),并且不会像我工作表中的隐藏列那样危险。同样解构一张表以在中间添加一列,然后在确保不破坏其他所有内容的同时重建它是一个非常令人头疼的问题,特别是因为这个列表超过 10k 行......

非常感谢任何愿意花时间在这个谜题上的人。 :)

【问题讨论】:

  • 我只是有个想法...如果我使用常规重复计数和 IF 语句,如果检测到 99999 重复会减去额外的 1...这可能比我的要容易得多最初的想法...... Buuuuuut 我不知道我整个星期都在写公式,当我试图想象这一点时,我的大脑正式返回#NO。 -_- 无论如何,有没有人认为这可能会起作用?
  • 我测试了 Wisely 的解决方案,效果很好,但我不理解公式的逻辑。试一试。
  • @Corinne 你的想法是我在我的解决方案中所做的——计算所有重复项,如果存在99999,则减去一个。我的是单细胞溶液。但是您可以使用带有公式的额外隐藏列;而且您不需要将列放在中间——它可以很容易地放在最后。
  • Ming,是的,我尝试了并将它与 Ron 所说的配对,现在它可以工作了。 :) =IF(COUNTIF($G17:G2000,99999)>0,SUMPRODUCT(($G17:G2000"")/COUNTIF($G17:G2000,$G17:G2000&""))-1,SUMPRODUCT( ($G17:G2000"")/COUNTIF($G17:G2000,$G17:G2000&""))) 我同意虽然我希望我了解重复公式的工作原理,但至少它在IF语句让我很高兴。 ^_^

标签: excel count duplicates


【解决方案1】:

假设您的列是 A 列,其 ID 来自 A2-A26 行,在 A28 上试试这个公式:

=SUMPRODUCT((A2:A26<>"")/COUNTIF(A2:A26,A2:A26&""))

它适用于我的其他项目。它不需要创建另一个列或表。

【讨论】:

  • 这太聪明了。用这个!!但是你能再解释一下这个公式吗?
  • 我不知道如何在框中粘贴代码...无论如何,这是我使用您非常有用的公式设法解决的问题:=IF(COUNTIF($G17:G2000,99999 )>0,SUMPRODUCT(($G17:G2000"")/COUNTIF($G17:G2000,$G17:G2000&""))-1,SUMPRODUCT(($G17:G2000"")/COUNTIF( $G17:G2000,$G17:G2000&""))) 我不知道它是如何工作的! :P 我试图在评估中关注它,但它填满了太多文本,无法在那个小窗口中滚动。显然,我可以说它是一个非常紧凑的重复检查器,我非常感谢......只是希望我能告诉它如何/为什么工作哈哈。谢谢!
  • @Corinne,假设您想计算从 B3 到 B40 的独特项目。只需复制代码=SUMPRODUCT((A2:A26<>"")/COUNTIF(A2:A26,A2:A26&"")) 并转到一个空单元格,按 F2,粘贴代码并将所有 A2:A26 更改为 B3:B40。
  • 是的,我已按原样使用代码和调整后的引用。 :) 我的版本还包括一个 IF 语句来检查是否检测到任何 99999,因为如果它存在,它至少会计算一次。 if (count of 99999 > 0) then (unique count formula - 1) else (unique count formula)。 :3 所以是的,我不知道唯一计数公式是如何逐步工作的(通过评估查看它是不可能的),但它比所有其他唯一计数公式更紧凑/我过去见过的解决方案(许多需要多列)所以我很满意! :)
【解决方案2】:

您可以尝试对数据进行透视表并将 ID 放在 ROWS 字段下。然后您可以使用counta() 来计算您将拥有多少个唯一 ID。

【讨论】:

    【解决方案3】:

    假设您的列表中没有空格,请尝试以下 数组 公式。使用 ctrl+shift+enter 输入公式。如果您正确执行此操作,Excel 将在公式周围放置大括号 {...}

    =SUM(1/COUNTIF(IDs,IDs))-(COUNTIF(IDs,99999)>0)
    

    IDs 是包含您的 ID 号的范围。例如 A2:A26

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多