Перепробовал все, что могу придумать, что предлагает гугл, скопирует и вставит сюда несколько для обзора, но проще говоря. У меня есть строка текста в качестве идентификатора, скажем «id-1» Я пытаюсь подсчитать количество уникальных элементов в столбце, где строка также имеет этот уникальный идентификатор

В приведенной ниже таблице я хочу сказать, что у пользователя id-1, по сути, есть 3 типа фруктов. у данных, которые мне дают, также есть пробелы, которые, кажется, ломают много предложений, которые я нашел, прибегая к помощи.

фрукты ID

id-1 яблоко

id-1 яблоко

id-1 банан

id-2 яблоко

id-2 банан

id-2 яблоко

ID-1  

ID-1  

id-1 груша

пытался:

=SUMPRODUCT(--(P:P>="id-1"),--(P:P<="id-1"),N:N)

=ArrayFormula(SUM(IF("id-1"=$P:$P,1/(COUNTIFS($P:$P,"id-1",$N:$N<>"",$N:$N<>"")),0)))

=SUM(IF(FREQUENCY(IF(P:P="id=1",N:N),N:N)>0,1))

Не моя область знаний, поэтому я был бы признателен за любые рекомендации. Использование Google Sheets, а не Excel.

1 ответ1

0

Это должно работать, хотя я хочу предостеречь от использования всей ссылки на стиль столбца, поскольку вычисления формул массива требуют интенсивной обработки. Если вам известны входящие диапазоны данных, установите диапазоны для границ данных.

=ArrayFormula(SUM(IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1)))

«Id-1» нужно будет изменить, если у вас есть много идентификаторов, для которых вы хотите выполнить поиск, вы можете поместить эти уникальные идентификаторы в другой столбец, ссылаться на этот столбец вместо жестко закодированного «id- #» и оставьте $ якоря и скопируйте формулу вниз.

Что он делает:

IF($A:$A="id-1",

Выясняет, соответствует ли каждая строка в диапазоне заданной строке, "id-1"

IF($B:$B<>"",

тогда, если так, проверяет только непустые ячейки в колонке фруктов

MATCH($B:$B,$B:$B&"",0)

и находит индекс строки первого найденного вхождения каждой строки

FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1

Затем находит, сколько существует уникальных фруктов

IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1)

И сопоставляет уникальные значения с найденными в первых трех фрагментах кода, приведенных выше, чтобы получить общее количество каждого уникального значения, а затем назначает каждой найденной строке один счетчик 1, чтобы указать, что она была найдена для текущего идентификатора.

SUM(IF(FREQUENCY(IF($A:$A="id-1",IF($B:$B<>"",MATCH($B:$B,$B:$B&"",0))),ROW($B:$B)-ROW($B$1)+1),1))

И наконец, суммирует все найденные строки для этого идентификатора

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