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

Count unique values in Excel worksheet column

这对我来说是新的。我正在尝试计算我的 ws 列中有多少个不同的值,问题是相同的值重复了很多次,而我只想计算一次。一些朋友试图帮助我编写代码,但我现在有点不知所措,例如我不知道为什么我要使用一个函数或者为什么我必须把 "Option Explicit" 放在它上面,欢迎任何想法。

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

怎么样:

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

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

至于为什么是函数,那是看coder了。您尝试做的事情也可以在子宏中完成。通过给它变量来调用函数。在较大的程序中,这可以彻底组织事情。

这里是一个子函数调用的例子。

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