【问题标题】:Counting distinct values in excel - frequency function在excel中计算不同的值 - 频率函数
【发布时间】:2010-11-28 08:36:22
【问题描述】:

我的任务是在 Excel 中计算一列中不同字符串的数量。后来通过谷歌快速搜索得到以下公式:here

=SUM(IF(FREQUENCY(MATCH(B2:B10,B2:B10,0),MATCH(B2:B10,B2:B10,0))>0,1))

考虑数据:

一个 乙 C D 一种 乙 乙 C

现在,match 函数将返回一个数组(因为第一个参数是一个数组):

1 2 3 4 1 2 7 3

到目前为止一切顺利。我不明白 FREQUENCY 函数在这里是如何工作的,特别是它如何处理被复制的 bin(例如 bin 1 在上述数据中被复制)。频率函数的结果是:

2 2 2 1 0 0 1 0 0

谢谢

塔拉斯

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    编辑:我意识到您的解决方案是如何工作的 - 已修改以反映这一点。

    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

    似乎该解决方案正在利用 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 的数量,那么您应该得到不同字符串的数量。

    【讨论】:

    • 这就是我认为频率函数正在做的事情,有效地忽略了重复的 bin。我希望有人可以肯定地说这是该函数的记录行为,但看起来这是一个众所周知的怪癖。感谢您的回答!
    【解决方案2】:

    您可以使用 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
    

    如果您需要显示独特的结果,您可以遍历集合并将值写入您的工作表。

    【讨论】:

    • 嘿Dendarii,我实际上是在问频率函数是如何工作的……不过你的例程很受赞赏!
    • 你说的很对!看起来乔尔回答了你的实际问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多