【问题标题】:Count unique non-blank entries in a range计算一个范围内的唯一非空白条目
【发布时间】:2019-01-02 07:35:21
【问题描述】:

我在 Excel 中有这样的数据:

Person1    A    A    B    A         C    3
Person2                                  0
Person3    A    B    C    D    E    F    6
Person4              A    A    A         1

我正在尝试找到一个公式,该公式可以复制每行最后一个单元格中的数字,即与该人相关联的唯一元素的数量,不包括空白。例如,Person1 有 3,因为有 A、B 和 C,即使有三个 A。每个人的列数都是固定的/相同的。值 A、B、C 等是字符串(与数字相反)。

这可以用公式来完成吗?

【问题讨论】:

    标签: excel vba excel-formula unique nonblank


    【解决方案1】:

    这是我发现的:

    =SUMPRODUCT(1/COUNTIF(B1:F1,B1:F1&""))

    它的工作原理很有趣:

    它将countifs的结果相加,并将每个除以1。因此,如果你有上面的例子,它返回4,因为它相加:

    1/1 + 1/3 + 1/3 + 1/1 + 1/3 + 1/3

    【讨论】:

    • 我对此进行了测试,但我认为这不会在示例第 3 行和第 4 行给出正确的结果
    • @tigeravatar - 是的,我的测试曾经有点假...我有 3 次 A 并且我期待 3 次,因此我认为它有效。
    • 嗯...现在它给出了#DIV/0!如果行中有任何空白单元格,则会出错
    • @tigeravatar - 慢慢到达那里 :) 我知道 1/ 有一些东西。
    【解决方案2】:

    要在工作表中使用的 UDF

    Public Function GetUniqueCount(ByVal rng As Range) As Long
        Dim dict As Object, currCell As Range
        Set dict = CreateObject("Scripting.Dictionary")
        For Each currCell In rng
            If Not IsEmpty(currCell) Then dict(currCell.Value) = 1
        Next currCell
        GetUniqueCount = dict.Count
    End Function
    

    在工作表中使用:

    【讨论】:

      【解决方案3】:

      这应该适合你:

      =SUMPRODUCT((B1:G1<>"")/COUNTIF(B1:G1,B1:G1&""))
      

      【讨论】:

      • @user51819 分子 (B1:G1&lt;&gt;"") 获取每个单元格并检查其是否为空白,如果为空白则未通过检查并计为 0,否则计为 1。然后分母获得总计数范围内的每个元素。然后,除法对每个元素应用 1/Count,这样如果一个元素中有 3 个,则它变为 1/3+1/3+1/3。例如,在样本行 1 上,细分为:1/3+1/3+1/1+1/3+0/1+1/1 = 0.333+0.333+1+0.333+0+1 = 3
      • @user51819 可以,但如果遇到任何问题,可以将公式包含在 ROUND 中。
      • 出于这个原因,我更喜欢用 FREQUENCIES 来做这些,但 COUNTIF 的效果出奇的好 :-)
      • 频率我的意思是
      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多