У меня есть несколько ячеек со строками, например, такими:
"Джон,Карла,Питер,Джон,Боб,Крис,Карла,Андреа"
Я хотел бы посчитать, сколько разных людей названо (т. е. сколько уникальных значений). Количество для строки выше будет равно 6. Обратите внимание, что общее количество имен в строках может сильно различаться. У некоторых есть только одно имя, а у самой большой — 14 (некоторые могут дублироваться). В некоторых именах есть пробелы (например, "Питер Смит, Андреа, Карла Мур"), но мы можем положиться на запятые, чтобы разделить их.
Я думаю, что решение состоит в том, чтобы преобразовать строку в массив, а затем использовать комбинацию формул SUM, IF и FREQUENCY, которые я нашел в Интернете.здесь, примененный к этому массиву.
Однако я не знаю, как преобразовать строку в массив (если это вообще возможно).
решение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
решение2
Эта формула будет перебирать «слова» и учитывать только уникальные.
=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()
. И возвращается ошибка, если она не найдена, и таким образом она учитывается.
решение3
=COUNTA(UNIQUE(TEXTSPLIT(A1,","),TRUE))