Подсчитайте оператор if, исключая строки и не равные числу в excel

У меня есть набор excel, для которого мне нужно подсчитывать записи на основе имен. Все они находятся в одном столбце, и должно быть 4 каждой записи. Мне нужна формула для подсчета количества ячеек с одной и той же записью, которые НЕ начинаются ни с «Розничная торговля», ни с «Коммерческий», и возвращают только имена в ячейках, для которых НЕ 4. Например, если мои данные выглядят таким образом :

    NAME
Retail - John
Retail - Sue
Kara
Kara
Joe
Joe
Joe
Joe
Commercial
Sarah

Мне нужна формула, которая будет искать в этом столбце и возвращать только "Кара - 2" и "Сара - 1". «Розничная» и «Коммерческая» исключаются с самого начала, и, поскольку «Джо» = 4, меня это не волнует. Есть ли какой-то способ, которым я могу выполнить этот поиск в столбце, чтобы он возвращал первый счетчик, соответствующий этому критерию, в C1, следующий - в C2 и так далее, пока у меня не будет столбца только несоответствующих записей? Мне бы хотелось получить результат, как показано ниже:

NAME        COUNT
Kara          2
Sarah         1  

Спасибо за внимание, я очень ценю любую помощь и совет, которые вы можете предложить!


person Mike L    schedule 12.11.2013    source источник
comment
Вы можете рассмотреть сводную таблицу, чтобы получить список уникальных записей и их количество в сочетании с фильтром во вспомогательном столбце (который относится к количеству столбцов), который исключает записи со словами Retail или Commercial в них, а также те, которые со счетом менее 4.   -  person chuff    schedule 12.11.2013


Ответы (1)


Если ваши данные находятся в столбце A, таблица результатов будет в столбцах B и C после запуска этого макроса:

Sub MAIN()

Dim A As Range, wf As WorksheetFunction
Dim s1 As String, s2 As String
Dim col As Collection
Set A = Intersect(Range("A:A"), ActiveSheet.UsedRange)
Set wf = Application.WorksheetFunction
Set col = MakeColl(A)

s1 = "Retail"
s2 = "Commercial"
K = 1
For i = 1 To col.Count
    v = col.Item(i)
    If InStr(v, s1) = 0 And InStr(v, s2) = 0 Then
        n = wf.CountIf(A, v)
        If n <> 4 Then
            Cells(K, "B").Value = v
            Cells(K, "C").Value = n
            K = K + 1
        End If
    End If
Next i
End Sub

Public Function MakeColl(rng As Range) As Collection
    Set MakeColl = New Collection
    Dim r As Range
    On Error Resume Next
    For Each r In rng
        v = r.Value
        If v <> "" Then
            MakeColl.Add v, CStr(v)
        End If
    Next r
    MsgBox MakeColl.Count
End Function
person Gary's Student    schedule 12.11.2013