如何计算范围内不同项目的数量而不使用数据透视表excel vba

时间:2015-03-16 20:45:27

标签: excel vba

我有一个很大的范围,有各种重复的id。我想知道该范围内有多少个唯一ID,但我不想使用数据透视表。 This question是相关的,但没有答案。使用VBA有一种简单的方法吗?

我也看到了this,但它对我没用。

3 个答案:

答案 0 :(得分:0)

您是否希望过滤列而不重复。之后,您可以使用小计函数。

Range("A:A").AdvancedFilter Action:=xlFilterInPlace, Unique:=True Range("B2").Select ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,C[-1])"

此VBA过滤A列中的列表,选择单元格B2并在其中写入小计函数。我得到了"宏记录"。

的功能

有帮助吗?

https://support.office.com/en-nz/article/Filter-for-unique-values-or-remove-duplicate-values-ccf664b0-81d6-449b-bbe1-8daaec1e83c2

答案 1 :(得分:0)

使用Dictionary对象加载唯一值,例如:

Sub CountUnique()
    Dim oDictionary As Object
    Dim rngData As Range
    Dim nCounter As Integer

    Set oDictionary = CreateObject("Scripting.Dictionary")
    Set rngData = Range("A1:A10") 'Change the range to suit
    nCounter = 0

    For Each cel In rngData
        If Not oDictionary.exists(cel.Value) Then
            oDictionary.Add cel.Value, 0
            nCounter = nCounter + 1
        End If
    Next cel

    MsgBox nCounter


End Sub

答案 2 :(得分:0)

这是我发现的最简单方法:

Function Count_Uniques(cell_range As Range)
    Dim n As Long
    Dim cells1 As Range
    Dim unique_count As Collection
    Set unique_count = New Collection

    On Error Resume Next
        For Each cells1 In cell_range
                 unique_count.Add cells1.Value, CStr(cells1.Value)
        Next cells1
    On Error GoTo 0

    Count_Uniques = unique_count.Count

End Function