VBA计算唯一值的数量

时间:2018-04-25 10:13:51

标签: excel vba excel-vba count-unique

我查看了论坛,我无法找到问题的正确答案。我有一个如下所示的列表:

ID ID2

SS_ID 1            T1              
SS_ID 1            T2
SS_ID 1            T2
SS_ID 1            T3
SS_ID 4            T1
SS_ID 4            T5

第一列有ID。问题是,在第二列中,我还有与第一列相关的ID号。

因此列表在Excel中的表格中,我试图在VBA的帮助下找到第2列中与第1列相关的用户数。如果有任何机会有没有VBA的解决方案,请随时帮助我。但据我所知,我只看到了VBA中的解决方案。

仅供参考我从宏中生成列表。我还找到了一种方法来删除重复项而不删除必须在我的情况下的行。

总结一下,我需要" unique"第2列中与第1列相关的值。它就像一个countif函数,但有点复杂。

结果应如下所示:

SS_ID 1    =    3
SS_ID 4    =    2

我对VBA完全不熟悉。

3 个答案:

答案 0 :(得分:3)

除非您绝对需要,否则无需

=SUMPRODUCT((A$2:INDEX(A:A, MATCH("Z", A:A))=D2)/(COUNTIFS(B$2:INDEX(B:B, MATCH("ZZZ", A:A)), B$2:INDEX(B:B, MATCH("ZZZ", A:A)),  A$2:INDEX(A:A, MATCH("Z", A:A)), D2)+(A$2:INDEX(A:A, MATCH("Z", A:A))<>D2)))

enter image description here

答案 1 :(得分:0)

Solution without VBA

你可以使用类似的东西: = SUMIFS(C1:C6; A1:A6;“= SS_ID 4”)

附图中的excel功能“SOMMA.PIU.SE”是英文的“SUMIFS”。 SUMIFS函数添加满足多个条件的所有参数(A1:A6)(A1:A6 =&gt;“= SS_ID 4”)。

答案 2 :(得分:0)

这是一个基于宏的解决方案:

Sub UniqueTable()
    Dim i As Long, N As Long, c As Collection, M As Long
    Dim j As Long, vd As String, va As String

    Columns("A:A").Copy Range("D1")

    ActiveSheet.Range("D:D").RemoveDuplicates Columns:=1, Header:=xlYes

    Range("E1").Value = "# of unique values"

    N = Cells(Rows.Count, "D").End(xlUp).Row
    M = Cells(Rows.Count, "B").End(xlUp).Row

    For i = 2 To N
        Set c = Nothing
        Set c = New Collection
        vd = Cells(i, "D").Value
        For j = 2 To M
            va = Cells(j, "A").Value
            If va = vd Then
                On Error Resume Next
                    c.Add Cells(j, "B").Value, CStr(Cells(j, "B").Value)
                On Error GoTo 0
            End If
        Next j
        Cells(i, "E").Value = c.Count
    Next i
End Sub

enter image description here

您可以轻松修改代码,将小结果表放在您喜欢的任何位置。如果你在cols A B 中添加/删除/修改项目,只需重新运行代码即可。