在Excel工作表列中计算唯一值

时间:2017-08-01 19:02:31

标签: excel-vba counter vba excel

这对我来说是新的。我试图计算我的ws列中有多少不同的值,问题是相同的值重复多次,我只想算一次。有些朋友试图帮我提供代码,但我现在有点迷失了,例如我不知道为什么我要使用某个功能,或者为什么我必须放置"选项明确"最重要的是,欢迎任何想法。

Option Explicit    

Function CountUnique(datarange As Range)
Dim datarange
Dim CheckCell
Dim Counter As Double
Counter = 0

For Each CheckCell In datarange.Cells
    Counter = Counter + (1 / (WorksheetFunction.CountIf(datarange, CheckCell.Value)))
Next

CountUnique = Counter

End Function

2 个答案:

答案 0 :(得分:0)

怎么样:

Option Explicit

Function CountUnique(datarange As Range) As Long
    Dim c As Collection, r As Range
    Set c = New Collection
    On Error Resume Next
        For Each r In datarange
            c.Add r.Value, CStr(r.Value)
        Next r
    On Error GoTo 0
    CountUnique = c.Count
End Function

enter image description here

答案 1 :(得分:0)

选项明确说明时,必须明确声明所有使用的变量。通过使用Dim和Redim,这可以让你的代码更容易调试imo。

至于为什么它是一个函数,这取决于编码器。您尝试做的事情也可以在子宏中完成。通过赋予变量来调用函数。在较大的程序中,这可以大大地组织事物。

以下是函数的子调用示例。

Option Explicit

Function CountUnique(datarange As Range)
Dim CheckCell
Dim Counter As Double
Counter = 0

For Each CheckCell In datarange.Cells
    Counter = Counter + (1 / (WorksheetFunction.CountIf(datarange, CheckCell.Value)))
Next

CountUnique = Counter
Msgbox Counter
End Function

通过运行test(),它将调用函数

 Sub test()
    Dim rag As Range
    Set rag = Range("A1:A23")
    Call CountUnique(rag)
    End Sub