Формула массива для ранжирования столбца A, разбиения по столбцу B и C - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь написать формулу массива, которая ранжирует столбец A и разбивает ранг столбцами B и C, но я не могу понять, как это сделать. По сути, я хочу RANK() OVER (PARTITION BY B,C ORDER BY A DESC).

У меня в настоящее время есть формула массива ниже в столбце D, которая работает для ранжирования Col A и разделения по Col B, но я не могу понять, как сделать формулу разделением по B и C:

=ArrayFormula(if(B2:B<>"",vlookup(B2:B&"|"&A2:A,{sort(B2:B&"|"&A2:A,B2:B,true,A2:A,false),row(B2:B)},2,false)-vlookup(B2:B,{sort(B2:B,B2:B,true),row(B2:B)},2,false)+1,""))

Я хотел бы оценить каждого человека по каждому виду деятельности (в столбце E). Столбец D показывает формулу, которую я имею, которая получает только самое последнее время для каждого человека.

enter image description here

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете использовать следующую формулу в ячейке D2, а затем перетащить ее вниз, чтобы скопировать в следующие ячейки:

=Rank(A2,Filter(A$2:$A,B$2:$B=B2, C$2:$C=C2),1)

Это будет использовать rank и фильтр функции. Мне не удалось найти решение с формулой массива.

РЕДАКТИРОВАТЬ

Используя ArrayFormula, ближе всего я получил эту формулу:

=ArrayFormula(rank(A2:A34,QUERY(A2:C34, "select A where B ='"&B2&"'and C ='"&C2&"'", -1)))

Проблема в том, что будет работать только для ранжирования значений, которые имеют одинаковые значения B и C из первой строки, идея заключалась в том, чтобы использовать значение из каждой ячейки строки вместо жесткого кодирования B2 и C2, но для условий в функциях запроса или фильтра значение остается одинаковым для каждой строки (т. е. с использованием функции row ()), в которую вставляется функция массива-формулы (в данном случае вторая строка). На мой взгляд, вам нужно разработать сложный алгоритм с функцией vlookup , как вы делали раньше.

...