如何计算范围内不同值的数量?


32

我有一个已经使用过滤器等进行了整理的大表。我想在某些列下添加一个摘要,其中包含该列中不同值的数量。

没有功能=COUNTDISTINCT(A2:A100),该怎么办?(Excel 2003)

我不能完全使用类似问题的答案,因为我不想修改表或过滤。我需要在工作表中添加一个内容,而不是进行修改

Answers:


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

无需使用数组公式即可完成此操作。


4
这项工作的方式/原因
RBarryYoung

4
@ RBarryYoung,SUMPRODUCT就像一个Array函数一样工作。尽管它所能做的远不止这里所用的功能,但这里只是检查列的每个实例,并根据列中的迭代次数为每个不同的值提供一个缩放值。因此,如果有两个'a'实例,则将1/2和1/2相加得到1。因此,对于每个不同的值,您都将加一。
Lance Roberts

1
这是我遇到的问题:“ 根据列中的迭代次数为每个不同的值得出一个可缩放的值。 ”如果我理解这一点,那么SUMPRODUCT将有效地执行类似的循环for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) },对?我在理解枚举条件枚举和第二个COUNTIF参数而不是第一个COUNTIF参数时会遇到一点麻烦吗?MS是否在任何地方记录/解释了DWIM-magic?知道如何有意地编写这些内容将非常高兴。
RBarryYoung

1
是的,您知道了,它将一个通常为单个值的数组迭代,将其所有参数(在这种情况下仅为1)相乘,然后添加迭代。SUMPRODUCTs可能会变得非常复杂,但是它们是Excel中最有用的功能之一,它可以产生字面的奇迹。
Lance Roberts

4
如果输入包含空白条目,则此操作将失败。在YouTube上演示的简单解决方法是:=SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&""))。它确保COUNTIF从不为空行返回0,否则将导致DIV/0错误。
cfi

7

我在这里找到了一个解决方案,这似乎是解决该问题的一种不可思议的回旋方式。但是,它有效...

= SUM(IF(COUNTIF(A2:A100,A2:A100)= 0,“”,1 / COUNTIF(A2:A100,A2:A100)))

然后按Ctrl+ Shift+ Enter。仅按Enter会产生错误的结果。


我希望看到其他答案!有没有比这更好的解决方法了?
Torben Gundtofte-Bruun 2010年

1
不,那是最好的方法。我不确定为什么那里有一个中频。您可以只使用输入的= SUM(1 / COUNTIF(A2:A100,A2:A100))数组
dkusleika 2010年

2
@dkusleika IF似乎可以防止被零除数错误。如上面链接的页面上所述,如果范围包含空白单元格,则需要这样做,否则可以将IF排除在外。
Bavi_H 2010年


1

本文显示了此文本值:

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

这是数值:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

本文显示了类似的公式,但也显示了使用过滤器的方法。

使用过滤器计算唯一值的数量

您可以使用“高级筛选器”从一列数据中提取唯一值并将其粘贴到新位置。然后,您可以使用ROWS函数来计算新范围内的项目数。

  1. 确保列的第一行具有列标题。
  2. 在“数据”菜单上,指向“筛选器”,然后单击“高级筛选器”。
  3. 在“高级筛选器”对话框中,单击“复制到另一个位置”。
  4. 如果尚未选择要计算的范围,请在“列表范围”框中删除所有信息,然后单击包含数据的列(或选择范围)。
  5. 在“复制到”框中,删除该框中的所有信息,或者在该框中单击,然后单击要在其中复制唯一值的空白列。
  6. 选择仅唯一记录复选框,然后单击确定。

    所选范围中的唯一值将复制到新列。

  7. 在范围中最后一个单元格下方的空白单元格中,输入ROWS函数。使用刚刚复制的唯一值范围作为参数。例如,如果唯一值的范围是B1:B45,则输入:
    = ROWS(B1:B45)


1

= SUM(1 / COUNTIF(A2:A100; A2:A100))

使用Ctrl + Shift + Enter确认

对于每个单元格,它会计算它发生了多少次,并对所有这些值的倒数求和。假设某个字符串或数字是5次。它的倒数是0.2,它的总和为5,所以加了1。最后,它给出了不同值的数量。

注意:出现空白时不起作用!


0

试试这个链接。这显示了如何在列表中计算出省略空白单元格的唯一值。

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= sum(if(频率(match(List,List,0),match(List,List,0))> 0,1))

其中“列表”是您的单元格范围,例如:

列表= $ A $ 2:$ A $ 12或-列表=偏移量($ A $ 1 ,,, match(rept(“ z”,255),$ A:$ A))-或-列表=偏移量($ A $ 1, ,, match(value(rept(“ 9”,255)),$ A:$ A))


0

= SUM(IF(频率(IF(小计(3,OFFSET(A2:A100,ROW(A2:A100)-ROW(A2),0,1))),MATCH(“〜”&A2:A100,A2:A100&“ “,0)),ROW(A2:A100)-ROW(A2)+1),1))

粘贴此公式后,请确保按CONTROL + SHIFT + ENTER。这是针对A2:A100的范围的,请相应地调整范围。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.