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

时间:2012-10-08 18:04:38

标签: excel

我已经浏览了这个网站并在网上找到了这个问题的答案,但我还没有成功,所以我会在新的帖子中提问。

我需要能够使用公式(或多个公式)计算Excel中每个类别的特定文本的出现次数。最好这可以在不使用VBA的情况下完成,但如果它是必需的,我将尝试编写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)))

非常感谢你的帮助!

4 个答案:

答案 0 :(得分:4)

就个人而言,我更喜欢使用Pivot Tables来做到这一点。对于任何大于偶尔的电子表格的东西,Microsoft Access或其他数据库中的SQL查询都会赢得游戏。

答案 1 :(得分:3)

试试这个“数组公式”

=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是一个“过滤器”,以确保只有A值= C1才能查看B值,第二个IF过滤掉B中的空白,否则MATCH给出B中该值的第一个匹配位置(因此对相同的值给出相同的数字)

IFs的结果是FREQUENCY函数的第一部分。 FREQUENCY中的“bins”由 ROW-ROW + 1 部分组成,它为您提供1到n的数字范围,其中包含{{1}的整个值范围可能会给。

现在我们只需要计算MATCH返回的不同数字的数量(因为它将等于B中不同值的数量),因此公式中的最后1是分配给IF中的每个非零值,并将结果相加。

详细说明C1 = A此部分的示例

FREQUENCY

导致此数组

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

其中col A&lt;&gt;的FALSE值“A”来自{1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE}的数字给出每个值的第一个匹配位置 - 通知2出现两次,因为foo出现两次,首先是第2行

并且MATCH部分为您提供此数组

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))将第一个数组中的值放入相关的“bins”中,公式现在解析为

FREQUENCY

请注意,=SUM(IF({1;2;0;1;0;0;0;1;1;0;0;0},1))返回的数组总和为6(六行,值为“A”),但只有5个非零数字,表示标准“A”的五个不同值。

现在最后一个IF为每个非零值返回1,FREQUENCY函数对那些得到5的

进行求和

答案 2 :(得分:2)

我也一直在打破这个问题。我在此找到的最简单的解决方案是数据透视表和单个公式的组合。

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

    =COUNT(B5:B100000)-1

  6. 这有多容易?

答案 3 :(得分:1)

简单方法 - 只需在插入数据透视表时选择数据模型选项,然后从值字段中选择不同的值选项。你完成了。