Как формулы массива работают с рангом? ранжирование с дубликатами без пробелов, по порядку - PullRequest
1 голос
/ 16 апреля 2019

Как формулы массива работают с ранжированием? Ранжирование с дубликатами без пробелов, по порядку.

У меня есть задача, которая должна ранжировать отделы по порядку (оценивая несколько показателей). Но иногда возникает ситуация, когда несколько отделов получают одинаковое звание (дублирующее звание). А простая формула RANK () не работает должным образом из-за пробелов в рангах (если два отдела займут первое место, следующий будет на третьей позиции).

Я нашел решение этой маленькой проблемы - https://www.extendoffice.com/documents/excel/4283-excel-rank-without-skipping-numbers.html

Но я не могу обернуться, как эта формула работает точно ...

Как это работает?

 {=SUM(IF(A2>$A$2:$A$14,1/COUNTIF($A$2:$A$14,$A$2:$A$14)))+1}

1 Ответ

1 голос
/ 17 апреля 2019

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

  1. COUNTIF($A$2:$A$14,$A$2:$A$14) -> создает рекламный массив одинакового размера диапазона (A2: A14) и для каждой строки подсчитывает, сколько раз находит значение строки, поэтому, если у вас есть два отдела с одним и тем же индикатором (указано) в столбце A в данном случае), в обеих строках двух департаментов формула дает вам 2 , если у вас есть три департамента с одним и тем же индикатором, формула дает 3 для каждой строки и т. д.
  2. 1 / pt.1 -> массив с обратным числом, описанным в п. 1. Теперь, если вы суммируете все n вхождений строк с одним и тем же индикатором этого массива, вы получите 1 , и здесь у вас есть хитрость. Когда (после) мы будем суммировать количество терков индикаторов, чем в строке, которую мы оцениваем, этот трик позволяет нам подсчитывать 1 для каждого индикатора вместо подсчета n , если есть больше индикаторов с тем же значением.
  3. IF(A2>$A$2:$A$14,*pt.2*) -> возвращает массив значений pt.2, «отфильтрованных» только со значениями, которые соответствуют строкам, где A2>An, поэтому значения, для которых оцениваемый вами индикатор, больше, чем значение в строка, в которой вы находитесь.
  4. SUM(*pt.3*) + 1 -> суммирует значения отфильтрованного массива pt. 3. Обратите внимание, что если у вас есть несколько строк с одним и тем же индикатором, для трика pt 2, их сумма весит как 1 , а не n .

Обратите внимание, что A2>$A$2:$A$14 будет нумеровать строки в порядке возрастания от меньшего значения индикатора к большему, если вы предпочитаете противоположное, вы можете использовать меньший вместо терка в формуле: A2<$A$2:$A$14

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...