Получить уникальное количество значений столбцов в VBA на основе фильтрации другого столбца - PullRequest
0 голосов
/ 04 марта 2020

У меня есть лист Excel, где есть 7 столбцов. Мне нужно получить уникальное количество пользователей (в столбце A) на основе столбца фильтрации C (Active - A, Inactive - I). Пример

User_ID  Status
A1        A
A2        I
A1        A
A3        I
A2        I

В настоящее время я использую приведенный ниже код для получения общего количества столбцов, но мне нужно сначала отфильтровать Status = A, а затем получить уникальный счетчик столбца User_ID, если в столбце A. есть дубликаты. Я искал на inte rnet, но не смог найти правильного решения, я очень новичок в VBA, поэтому любезно помогите.

DSheet.Range("A2").End(xlDown).Row

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Использование

Коллекция

Private Sub Test()
Dim Test As New Collection
Dim Test1 As New Collection
Dim rng As Range
For i = 2 To 6 'replace 6 with last row number
    Value = Cells(i, "A").Value
    check = Contains(Test, Value)
    check1 = Contains(Test1, Value)
    If Cells(i, "B").Value = "A" And Not check And Len(Value) > 0 Then
        MsgBox Value
        Test.Add Value, CStr(Value)
    ElseIf Cells(i, "B").Value = "I" And Not check1 And Len(Value) > 0 Then
        Test1.Add Value, CStr(Value)
    End If
Next i
On Error GoTo 0
MsgBox Test.count ' Distinct count for Status A
MsgBox Test1.count ' Distinct count for Status I
End Sub

'Function to check if the value exists in collection.
Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
    Contains = True
    obj = col(key)
    Exit Function
err:

    Contains = False
End Function
0 голосов
/ 04 марта 2020

Большое спасибо за вашу помощь. Я смог выполнить через более короткий код. Я фильтрую один столбец и получаю уникальные значения на основе отфильтрованных значений. Поделиться кодом:

SSheet.Range("$A:$S").Autofilter field:=2, Criteria1:="A"
Set List=CreateObject(Scripting.Dictionary)

For Each ids In SSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible)
 If Not List.Exists(ids.Value) Then List.Add ids.Value, Nothing
Next
MsgBox List.count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...