我的任务是计算 Excel 中某一列中不同字符串的数量。后来快速谷歌搜索发现了以下公式here http://office.microsoft.com/en-us/excel/HP030561181033.aspx#Count%20the%20number%20of%20unique%20values%20by%20using%20%20functions:
=SUM(IF(频率(匹配(B2:B10,B2:B10,0),匹配(B2:B10,B2:B10,0))>0,1))
考虑数据:
A
乙
C
D
A
乙
乙
C
现在,匹配函数将返回一个数组(因为第一个参数是一个数组):
1
2
3
4
1
2
7
3
到目前为止,一切都很好。我不明白的是 FREQUENCY 函数在这里如何工作,特别是它如何处理复制的 bin(例如 bin 1 在上述数据中被复制)。频率函数的结果为:
2
2
2
1
0
0
1
0
0
Thanks
Taras
EDIT:我意识到你的解决方案是如何工作的 - 进行了修改以反映这一点。
FREQUENCY 正在从搜索数组中的 bin 中搜索条目。它的工作原理如下:
搜索数组:1 2 3 4 1 2 7 3
垃圾箱:1 2 3 4 1 2 7 3
Bin 1 => 有两个 1 => 2
Bin 2 => 有两个 2 => 2
Bin 3 => 有两个 3 => 2
Bin 4 => 有一个 4 => 1
Bin 1 重复 => 1 已计数 => 0
Bin 2 重复 => 2 已计数 => 0
Bin 7 => 有一个 7 => 1
Bin 3 重复 => 3 已计数 => 0
看起来该解决方案似乎正在利用频率怪癖,也就是说,它不会对同一个垃圾箱进行两次计数,因为您might期望值为 1 的第二个 bin 也非零。但这就是它的工作原理 - 因为它只会计算第一个 bin 的出现次数,而不计算重复 bin 的出现次数,因此值大于零的行数将为您提供不同条目的数量。
这是您可能会发现有用的替代方法。它可用于计算不同值的数量:
假设您的字符串范围是 B2:B10。在另一列中填写
=(MATCH(B2,B$2:B2,1)-(ROW(B2)-ROW(B$2)))>0
当您向下复制时,该行应该发生变化,因此第二行应该是,例如:
=(MATCH(B3,B$2:B3,1)-(ROW(B3)-ROW(B$2)))>0
如果当前行包含字符串的第一个实例,则表示为 TRUE(如果您给它几分钟,您应该能够弄清楚它在做什么)。因此,如果您使用 COUNTIF() 计算 TRUE 的数量,那么您应该获得不同字符串的数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)