У меня есть несколько ячеек с такими строками, как эта:

"Джон, Carla, Питер, Джон, Боб, Крис, Carla, Andrea"

Я хотел бы посчитать, сколько разных людей названы (то есть сколько уникальных ценностей). Количество для строки выше будет 6. Обратите внимание, что общее количество имен в строках может сильно различаться. У некоторых есть только одно имя, а у самого большого - 14 (где некоторые могут быть продублированы). В некоторых именах есть пробелы (например, «Питер Смит, Андреа, Карла Мур»), но мы можем положиться на запятые для их разделения.

Я думаю, что решение состоит в том, чтобы преобразовать строку в массив, а затем использовать комбинацию формул SUM, IF и FREQUENCY, которые я нашел здесь, применительно к этому массиву.

Однако я не знаю, как преобразовать строку в массив (если это путь).

2 ответа2

1

Попробуйте эту небольшую пользовательскую функцию:

Public Function PeopleKounter(s As String) As Long
    Dim DQ As String, c As Collection
    Set c = New Collection
    DQ = Chr(34)

    ary = Split(Replace(s, DQ, ""), ",")

    On Error Resume Next
        For Each a In ary
            c.Add a, CStr(a)
        Next a
    On Error GoTo 0

    PeopleKounter = c.Count
End Function

1

Эта формула будет повторять "слова" и считать только уникальное.

=SUMPRODUCT(--(ISERROR(FIND(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",99)),(ROW($1:$17)-1)*99+1,99)),TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",99)),1,(ROW($1:$17)-1)*99+1))))))

Поскольку он повторяется, он сравнивает его с текущим со всем, что было до этого с FIND() . И ошибка возвращается, если не найдена, и, таким образом, она считается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .