Как преобразовать строку значений, разделенных запятыми, в массив

260
PrincessLilly

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

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

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

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

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

0
Вы что-нибудь пробовали? Toto 6 лет назад 0
Я нашел это здесь https://www.ozgrid.com/forum/forum/help-forums/excel-general/82636-array-constant-from-cell-values ​​и попытался использовать его, но не смог понять его. Затем попытался разделить каждую строку с помощью функции «Текст в столбцы», а после этого с помощью этого онлайн-учебника, который я упоминал для подсчета значений в массиве, но мне пришлось бы вводить формулу вручную в каждой строке, иначе массив не изменится. в следующий ряд. PrincessLilly 6 лет назад 0

2 ответа на вопрос

1
Gary's Student

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

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 

enter image description here

Это сработало очень хорошо, спасибо! PrincessLilly 6 лет назад 0
Теперь я добавил «Application.Volatile» вверху, чтобы эта функция автоматически обновлялась при пересчете листа. PrincessLilly 6 лет назад 1
@PrincessLilly Хорошая идея ..................................... Gary's Student 6 лет назад 0
1
Scott Craner

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

=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(). И ошибка возвращается, если не найдена, и, таким образом, она считается.

enter image description here

Умное использование SUMPRODUCT () Gary's Student 6 лет назад 0
Хороший вариант для тех, кто хочет использовать формулу, которая не определена пользователем. PrincessLilly 6 лет назад 0