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

Luc*_*eer 7 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
...      ...
Run Code Online (Sandbox Code Playgroud)

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

Cat.    Count of distinct ocurrences per category
A       5
B       3
C       1
Run Code Online (Sandbox Code Playgroud)

最后,我知道我可以对列表进行重复数据删除,但我希望保留列表完整性以便存档,因此不需要重复数据删除的计数将是理想的.

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

=IF(A:A=C1,SUM(IF(FREQUENCY(MATCH(B1:B11,B1:B11,0),MATCH(B1:B11,B1:B11,0))>0,1)))
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助!

bar*_*ini 4

试试这个“数组公式”

=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。中的“bin”由ROW-ROW+1FREQUENCY部分组成,它为您提供 1 到 n 的数字范围,其中包含可能给出的整个值范围。MATCH

现在我们只需要计算 s 返回的不同数字的数量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 出现两次,首先在第 2 行

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