簡體   English   中英

VBA計算唯一值的數量

[英]VBA count the number of unique values

我調查了論壇,但找不到真正解決我問題的正確答案。 我有一個看起來像這樣的清單:

編號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的新手。

除非絕對需要,否則不需要

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

在此處輸入圖片說明

沒有VBA的解決方案

您可以使用類似這樣的東西:= SUMIFS(C1:C6; A1:A6;“ = SS_ID 4”)

所附圖像中的excel功能“ SOMMA.PIU.SE”為英語“ SUMIFS”。 SUMIFS函數添加滿足多個條件(A1:A6 =>“ = SS_ID 4”)的所有自變量(A1:A6)。

這是基於宏的解決方案:

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中添加/刪除/修改項目,只需重新運行代碼即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM