计算Excel中多列的唯一值

时间:2014-10-22 16:09:55

标签: arrays excel recursion count unique

我尝试过使用数据透视表和SUMPRODUCT&查看可能的解决方案之后的COUNTIF公式,但尚未找到任何积极的方法。以下是输入数据:

Level 1     Level 2     Level 3     Level 4     Level 5
Tom         Liz         
Tom         Liz         Mel     
Tom         Liz         Dan     
Tom         Liz         Dan         Ian
Tom         Liz         Dan         Ken 
Tom         Tim         
Tom         Tim         Fab     
Tom         Tim         Fab         Ken 
Tom         Tim         Fab         Ken          Jan
Eve             

预期输出数据如下。目的是不必输入预先加载的名称列表。期望是程序可以仅根据输入数据确定计数:

Counts
-------
Tom: 9
Eve: 1
Liz: 5
Tim: 4
Mel: 1
Dan: 3
Fab: 3
Ian: 1
Ken: 3
Jan: 1

对此有任何帮助表示赞赏....谢谢!

更新:带有名称列表的预加载列表可用于生成计数。以上描述已相应更新。

1 个答案:

答案 0 :(得分:1)

首先在标准模块中输入以下 UDF

Public Function ListUniques(rng As Range) As Variant
    Dim r As Range, ary(1 To 9999, 1 To 1) As Variant
    Dim i As Long, C As Collection
    Set C = New Collection
    On Error Resume Next
    For Each r In rng
        v = r.Value
        If v <> "" Then
            C.Add v, CStr(v)
        End If
    Next r
    On Error GoTo 0

    For i = 1 To 9999
        If i > C.Count Then
            ary(i, 1) = ""
        Else
            ary(i, 1) = C.Item(i)
        End If
    Next i
    ListUniques = ary
End Function

然后点亮列的一部分,例如 G1 通过 G50 并输入数组公式:

=listuniques(A2:E11)
必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter key。

如果操作正确,您应该看到类似的内容:

pic


最后在 H1 中输入:

=COUNTIF($A$2:$E$11,G1)

并复制

注意

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

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = myfunction的(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

      必须启用宏才能使其生效!