计算VBA中所选(大)范围内不同值的数量?

Qbi*_*bik 5 algorithm excel mergesort vba excel-vba

如何计算VBA中所选(大)范围内的不同值(数字和字符串混合)的数量?

我以这种方式思考:
1.将数据读入一维数组.
2.排序数组(快速或合并排序)需要测试哪个
3.如果排序数组,只需计算不同值的数量:if(a[i]<>a[i+1]) then counter=counter+1.

这是解决这个问题最有效的方法吗?

编辑:我想在Excel中执行此操作.

Sid*_*out 7

这是一个VBA解决方案

您不需要使用Array来完成此操作.您还可以使用集合.例

Sub Samples()
    Dim scol As New Collection

    With Sheets("Sheet1")
        For i = 1 To 100 '<~~ Assuming the range is from A1 to A100
            On Error Resume Next
            scol.Add .Range("A" & i).Value, Chr(34) & _
            .Range("A" & i).Value & Chr(34)
            On Error GoTo 0
        Next i
    End With

    Debug.Print scol.Count

    'For Each itm In scol
    '   Debug.Print itm
    'Next
End Sub
Run Code Online (Sandbox Code Playgroud)

跟进

Sub Samples()
    Dim scol As New Collection
    Dim MyAr As Variant

    With Sheets("Sheet1")
        '~~> Select your range in a column here
        MyAr = .Range("A1:A10").Value

        For i = 1 To UBound(MyAr)
            On Error Resume Next
            scol.Add MyAr(i, 1), Chr(34) & _
            MyAr(i, 1) & Chr(34)
            On Error GoTo 0
        Next i
    End With

    Debug.Print scol.Count

    'For Each itm In scol
    '   Debug.Print itm
    'Next
End Sub
Run Code Online (Sandbox Code Playgroud)

  • +1很好的答案!迭代对象(即Range对象)与数组之间的迭代仍然很慢,因此复制到变量数组然后添加到集合中要快得多*(抱歉,我是Excel性能极客!) (3认同)