我有一个.xls
文件,其中有一列包含一些数据。如何计算包含此列的唯一值的数量?
我用谷歌搜索了很多选项,但他们在那里给出的公式总是给我错误。例如,
=INDEX(List, MATCH(MIN(IF(COUNTIF($B$1:B1, List)=0, 1, MAX((COUNTIF(List, "<"&List)+1)*2))*(COUNTIF(List, "<"&List)+1)), COUNTIF(List, "<"&List)+1, 0))
返回
要计算 A2:A100 中不同值的数量(不计算空白):
=SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&""))
从@Ulli Schmid的回答中复制到这个 COUNTIF() 公式在做什么?:
=SUMPRODUCT((A1:A100<>"")/COUNTIF(A1:A100,A1:A100&""))
计算A1:A100 中的唯一单元格,不包括空白单元格和具有空字符串 ("") 的单元格。
它是如何做到的?例子:
A1:A100 = [1, 1, 2, "apple", "peach", "apple", "", "", -, -, -, ...]
then:
A1:A100&"" = ["1", "1", "2", "apple", "peach", "apple", "", "", "", "", "", ...]
所以需要这个&""将空白单元格 (-) 转换为空字符串 ("")。如果您要直接使用空白单元格计数,则 COUNTIF() 返回 0。使用此技巧,“”和 - 都被视为相同:
COUNTIF(A1:A100,A1:A100) = [2, 2, 1, 2, 1, 2, 94, 94, 0, 0, 0, ...]
but:
COUNTIF(A1:A100,A1:A100&"") = [2, 2, 1, 2, 1, 2, 94, 94, 94, 94, 94, ...]
如果我们现在想要获取所有唯一单元格的计数,不包括空格和“”,我们可以除
(A1:A100<>""), which is [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, ...]
通过我们的中间结果 COUNTIF(A1:A100,A1:A100&""),并对这些值求和。
SUMPRODUCT((A1:A100<>"")/COUNTIF(A1:A100,A1:A100&""))
= (1/2 + 1/2 + 1/1 + 1/2 + 1/1 + 1/2 + 0/94 + 0/94 + 0/94 + 0/94 + 0/94 + ...)
= 4
如果我们使用COUNTIF(A1:A100,A1:A100)
而不是COUNTIF(A1:A100,A1:A100&"")
,那么其中一些 0/94 将是 0/0。由于不允许除以零,我们会抛出一个错误。
尝试 -=SUM(IF(FREQUENCY(MATCH(COLUMNRANGE,COLUMNRANGE,0),MATCH(COLUMNRANGE,COLUMNRANGE,0))>0,1))
其中COLUMNRANGE = 您拥有这些值的范围。
例如 -=SUM(IF(FREQUENCY(MATCH(C12:C26,C12:C26,0),MATCH(C12:C26,C12:C26,0))>0,1))
按 Ctrl+Shift+Enter 使公式成为数组(否则将无法正确计算)
这是获取唯一值计数以及获取唯一值的另一种快速方法。将您关心的列复制到另一个工作表中,然后选择整个列。单击数据-> 删除重复项-> 确定。这将删除所有重复的值。
这是一个优雅的数组公式(我在这里找到http://www.excel-easy.com/examples/count-unique-values.html)可以很好地解决问题:
类型
=SUM(1/COUNTIF(列表,列表))
并使用 CTRL-SHIFT-ENTER 确认
计数唯一的条件。ColA
是 ID 和使用条件ID=32
, ColB
是 Name 并且我们正在尝试计算特定 ID 的唯一名称
=SUMPRODUCT((B2:B12<>"")*(A2:A12=32)/COUNTIF(B2:B12,B2:B12))
我刚刚想到的另一种棘手的方法(经过测试并且有效!)。
Conditional Formatting
, Highlight Cells
,Duplicate Values
Data
然后Filter
基于颜色的过滤器:
诚然,这比您经常使用的电子表格更适合一次性检查数据,因为它需要进行一些格式更改。
您可以执行以下步骤:
首先隔离列(如果有任何相邻列,则通过在要计算唯一值的列之前和/或之后插入空白列;
然后选择整个列,转到“数据”>“高级过滤器”并选中“仅唯一记录”复选框。这将隐藏所有非唯一记录,因此您可以通过选择整个列来计算唯一记录。
如果使用 Mac
pbpaste|sort -u|wc -l
Linux 用户替换pbpaste
为 xclip xsel 或类似的
Windows 用户,这是可能的,但需要一些脚本......从http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/开始
您可以为唯一记录计数添加新公式
=IF(COUNTIF($A$2:A2,A2)>1,0,1)
现在您可以使用数据透视表并获得SUM
唯一记录数。如果您有两行或多行存在相同值,但您希望数据透视表报告唯一计数,则此解决方案效果最佳。
我正在使用第 1 行带有标题的电子表格,数据在第 2 行及以下。
ID 在 A 列中。为了计算有多少不同的值,我将这个公式从第 2 行放到第一个可用列 [F 在我的例子中] 的电子表格的末尾:"=IF(A2=A1,F1+1,1)"
。
然后我在空闲单元格中使用以下公式:"=COUNTIF(F:F,1)"
. 通过这种方式,我确信每个 ID 都被计算在内。
请注意,必须对 ID 进行排序,否则它们将被计算多次……但与数组公式不同,即使使用150000行的电子表格,它也非常快。
使用动态数组公式(截至本帖仅适用于 Office 365 预览体验成员):
=COUNTA(UNIQUE(A:A))
我的数据集是 D3:D786,D2 中的列标题,D1 中的函数。公式将忽略空白值。
=SUM(IF(频率(IF(小计(3,OFFSET(D3,ROW(D3:D786)-ROW(D3),,1))),IF(D3:D786<>"",MATCH("~"&D3 :D786,D3:D786&"",0))),ROW(D3:D786)-ROW(D3)+1),1))
输入公式时,CTRL + SHIFT + ENTER
我在下面的网站上找到了这个,如果你喜欢那种东西,那里有更多关于 Excel 的解释,我不明白。
我将我的数据集复制并粘贴到另一张表中以验证它,它对我有用。