【问题标题】:VBA count the number of unique valuesVBA计算唯一值的数量
【发布时间】:2018-04-26 17:18:59
【问题描述】:

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

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 的帮助下查找第二列中与第一列相关的用户数。如果有任何机会没有 VBA 的解决方案,请随时帮助我。但据我所知,我只看到 VBA 中的解决方案。

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

总而言之,我需要第二列中与第一列相关的“唯一”值的总和。它类似于 countif 函数,但稍微复杂一些。

结果应该是这样的:

SS_ID 1    =    3
SS_ID 4    =    2

我对 VBA 完全陌生。

【问题讨论】:

  • 你想得到什么输出?我的意思是,您解释了您的问题,还发布了一些数据作为示例。您发布的数据的正确答案是什么?
  • 嘿,我编辑了我的帖子。我希望它有助于更​​多地理解它
  • 你确定SS_ID 1 = 2?不应该是SS_ID 1 = 3吗?我问这些是因为SS_ID 1T1T2(两次)和T3 有关。我说的对吗?
  • @DavidMorocutti 那不是SS_ID 1 = 3吗?因为它有T1T2T3
  • 是的,对不起,我太笨了......

标签: vba excel count-unique


【解决方案1】:

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

=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)))

【讨论】:

    【解决方案2】:

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

    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
    

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

    【讨论】:

    • 非常感谢,我会尝试将它实现到我的宏中:)
    【解决方案3】:

    Solution without VBA

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多