如何统计Excel中每个类别的唯一值

我在这个网站上看了一下,并在网上回答了这个问题,但我还没有成功,所以我会问一个新的线程。

我需要能够使用一个公式(或一些公式)计算Excel中每个类别的特定文本的出现次数。 最好这可以不使用VBA,但如果是nessesary,我会尝试写一个VBA命令。

以下是我正在处理的内容:

Cat. Word A doo A foo A foo A loo B loo B goo B loo A roo A lol B rar C goo ... ... 

我想有一个公式来计算每个类别每个单词的唯一出现次数。 这些类别是已知的和有限的,并且被包含在我的excel表单中的一个列表中,但是这些单词可以是任何数量,并且是未知的。 每个类别都可以包含其他类别的词汇,最终结果应该如下所示:

 Cat. Count of distinct ocurrences per category A 5 B 3 C 1 

最后,我知道我可以对列表进行重复删除操作,但是为了存档的目的,我想保留这个列表,因此不需要重复删除的计数是理想的。

这是我试图做的,但最后没有奏效:

 =IF(A:A=C1,SUM(IF(FREQUENCY(MATCH(B1:B11,B1:B11,0),MATCH(B1:B11,B1:B11,0))>0,1))) 

非常感谢你的帮助!

就个人而言,我更喜欢使用数据透视表 。 对于大于偶尔的电子表格的任何事情,Microsoft Access或其他数据库中的SQL查询都会赢得游戏。

我也一直在嘲笑我。 我在这发现的最简单的解决scheme是一个数据透视表和一个公式的组合。

  1. 创build一个数据透视表
  2. 把猫。 在列标签中
  3. 将Word放在行标签中
  4. 把价值放在话语中
  5. 在单元格B2使用计数公式,范围为B5:B100000和减1(对于数据透视表下的总计:

    =COUNT(B5:B100000)-1

这是多么容易?

试试这个“数组公式”

=SUM(IF(FREQUENCY(IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0))),ROW(B$1:B$11)-ROW(B$1)+1),1))

CTRL+SHIFT+ENTER

C1是计算的第一类。 复制所有类别的公式

说明

公式的基本思想是,第一个IF是一个“filter”,如果A值= C1,确保只查看B值,第二个IF过滤掉B中的空白,否则MATCH给出第一个匹配的位置对于B中的那个值(因此对于相同的值给出相同的数字)

IFs的结果是FREQUENCY函数的第一部分。 FREQUENCY中的“bin”由ROW-ROW + 1部分组成,它给出了一系列数字1到n,它们将涵盖MATCH可能给出的整个值范围。

现在我们只需要计算由IF返回的不同数字的数量(因为这将等于B中不同数值的数目),所以公式中的最后1分配给每个非零值在FREQUENCY和结果总结。

详细为你的例子,其中C1 = A这一部分

=IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0)))

结果在这个数组中

{1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE}

FALSE值,其中COL A <>“A”,否则MATCH数字给出每个值的第一个匹配的位置 – 通知2出现两次,因为foo出现两次,第一次出现在第二行

和行ROW(B$1:B$11)-ROW(B$1)+1部分给你这个数组

{1;2;3;4;5;6;7;8;9;10;11}

所以现在公式看起来像这样

=SUM(IF(FREQUENCY({1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE},{1;2;3;4;5;6;7;8;9;10;11}),1))

因此, FREQUENCY将第一个数组中的值放入相关的“容器”中,公式现在可以解决这个问题

=SUM(IF({1;2;0;1;0;0;0;1;1;0;0;0},1))

请注意,由FREQUENCY返回的数组总和为6(六行,值为“A”),但只有5个非零数字,表示标准“A”的五个不同值。

现在,最后一个IF为每个非零值返回1, SUM函数将这些值相加得到5

简单的方法 – 只需在插入Pivot时selectData Model选项,然后从值字段中select不同的值选项。 你完成了。