我已经浏览了这个网站并在网上找到了这个问题的答案,但我还没有成功,所以我会在新的帖子中提问。
我需要能够使用公式(或多个公式)计算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)))
非常感谢你的帮助!
答案 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)
我也一直在打破这个问题。我在此找到的最简单的解决方案是数据透视表和单个公式的组合。
在单元格B2
中使用范围为B5:B100000
和减1的计数公式(对于数据透视表下方的总计数:
=COUNT(B5:B100000)-1
这有多容易?
答案 3 :(得分:1)
简单方法 - 只需在插入数据透视表时选择数据模型选项,然后从值字段中选择不同的值选项。你完成了。