我的任务是计算excel中列中不同字符串的数量。之后的Google快速搜索产生了here的以下公式:
= SUM(IF(频率(匹配(B2:B10,B2:B10,0),匹配(B2:B10,B2:B10,0))> 0,1))
考虑数据:
一个 乙 C d 一个 乙 Ë ç
现在,match函数将返回一个数组(因为第一个参数是一个数组):
1 2 3 4 1 2 7 3
到目前为止一切顺利。我不明白的是FREQUENCY函数在这里是如何工作的,特别是它如何处理复制的bin(例如bin 1在上面的数据中被复制)。频率函数的结果是:
2 2 2 1 0 0 1 0 0
由于
塔拉斯
答案 0 :(得分:2)
编辑:我意识到您的解决方案是如何运作的 - 经过修改以反映这一点。
FREQUENCY正在搜索搜索阵列中您的分档中的条目。以下是它的工作原理:
搜索数组:1 2 3 4 1 2 7 3
Bins: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
似乎解决方案似乎正在利用FREQUENCY怪癖,也就是说,它不会对同一个bin进行两次计数,因为可能期望值为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的数量,那么您应该获得不同字符串的数量。
答案 1 :(得分:0)
您可以使用vba例程:
Sub Uniques()
Dim rng As Range
Dim c As Range
Dim clnUnique As New Collection
Set rng = Range("A1:A8")
On Error Resume Next
For Each c In rng
clnUnique.Add c.Value, CStr(c.Value)
Next c
On Error GoTo 0
MsgBox "Number of unique values = " & clnUnique.Count
End Sub
如果您需要显示唯一结果,您可以循环访问该集合并在工作表上写入值。