[英]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的新手。
除非絕對需要,否則不需要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)))
您可以使用類似這樣的東西:= 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
您可以輕松地修改代碼,以便將小結果表放在您喜歡的任何位置。 如果您在列A和B中添加/刪除/修改項目,只需重新運行代碼即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.