VBA подсчитывает количество уникальных значений - PullRequest
0 голосов
/ 25 апреля 2018

Я заглянул на форум и не могу найти правильный ответ на свою проблему. У меня есть список, который выглядит так:

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

1-й столбец имеет идентификаторы. Дело в том, что во втором столбце у меня есть также идентификационные номера, которые связаны с 1-м столбцом.

Таким образом, список находится на листе в Excel, и я пытаюсь найти с помощью VBA количество пользователей из 2-го столбца, которые связаны с 1-м столбцом. Если по какой-либо причине есть решение без VBA, пожалуйста, не стесняйтесь мне помочь. Но насколько я вижу, я вижу решение только в VBA.

К вашему сведению, я генерирую список из макроса. Я также нашел способ удалить дубликаты без удаления строк, что обязательно в моем случае.

Чтобы подвести итог, мне нужна сумма "уникальных" значений из 2-го столбца, которые относятся к 1-му столбцу. Это похоже на функцию счетчика, но немного сложнее.

Результат должен выглядеть следующим образом:

SS_ID 1    =    3
SS_ID 4    =    2

Я совершенно новичок в VBA.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Вот решение на основе макросов:

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

Вы можете легко изменить код, чтобы разместить небольшую таблицу результатов в любом месте, где вам нравится,Если вы добавляете / удаляете / изменяете элементы в столбцах A и B , просто повторите код.

0 голосов
/ 25 апреля 2018

Нет необходимости в , если вам это абсолютно не нужно.

=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

0 голосов
/ 25 апреля 2018

Решение без VBA

Вы можете использовать что-то подобное: = SUMIFS (C1: C6; A1: A6; "= SS_ID 4")

ExcelФункцией "SOMMA.PIU.SE" на прикрепленном изображении является "SUMIFS" на английском языке.Функция SUMIFS добавляет все свои аргументы (A1: A6), которые соответствуют нескольким критериям (A1: A6 => "= SS_ID 4").

...