Excel 中用逗号分隔的单元格中值的唯一计数

Excel 中用逗号分隔的单元格中值的唯一计数

如何在 Excel 中获取用逗号分隔的单元格中值的唯一计数?

例如:单元格 B13 具有值

1,1,2,3,7,1

使用以下公式,我们得到了以 6 为分隔符的值的数量,

=1+LEN(B13)-LEN(SUBSTITUTE(B13,";",""))

但我想计算单元格 B13 中的唯一值,即 4。有人可以帮我实现吗?

注意:这个问题类似于如何在 Excel 2010 中计算唯一的逗号分隔值然而,这是一个特殊的、限制性的情况(值仅为个位数),它允许不适用于其他问题的解决方案。

答案1

安装以下内容用户定义函数(UDF)在标准模块中:

Public Function CountUnique(r As Range) As Long
    Dim c As Collection
    Set c = New Collection
    ary = Split(r.Text, ",")
    On Error Resume Next
    For Each a In ary
        c.Add a, CStr(a)
        If Err.Number = 0 Then
            CountUnique = CountUnique + 1
        Else
            Err.Number = 0
        End If
    Next a
    On Error GoTo 0
End Function

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从 Excel 使用 UDF:

=CountUnique(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

例如:

在此处输入图片描述

答案2

从公式可以看出,列表仅包含个位数。以下是其中一种方法:

=10-ISERROR(FIND(0,B13))-ISERROR(FIND(1,B13))-ISERROR(FIND(2,B13))
   -ISERROR(FIND(3,B13))-ISERROR(FIND(4,B13))-ISERROR(FIND(5,B13))
   -ISERROR(FIND(6,B13))-ISERROR(FIND(7,B13))-ISERROR(FIND(8,B13))
   -ISERROR(FIND(9,B13))

我将公式分成几行,以便于阅读,并使逻辑清晰可见。如果您要复制和粘贴,则需要删除格式回车符和多余的空格。

它从所有十位数字(0 到 9)开始,作为可能存在的唯一值。它在字符串中查找每个数字。如果不存在,它会将可能的唯一值的数量减少一个(不成功的 FIND 将返回错误,使 ISERROR 为真,Excel 将其处理为 1)。

相关内容