这对我来说是新的。我试图计算我的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
答案 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
答案 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