Предполагая, что ваши данные (как показано) в A1:B3
В D1 введите =SUMPRODUCT((A1>$A$1:$B$3)/COUNTIF($A$1:$B$3,$A$1:$B$3))
Заполните формулу до D3, затем до E3.
Если вы хотите деструктивно заменить исходные отсортированные данные, перейдите к необязательному шагу 3:
- Выберите + Копировать D1:E3 -> Вставить как значения в A1.
Пояснение формулы:
Есть две ключевые части для понимания этой формулы.
(A1>$A$1:$B$3)
генерирует массив булевых значений: TRUE
для значений в A1: B3, которые меньше, чем A1, FALSE
для значений, превышающих A1. Поскольку этот массив делится в формуле, Excel преобразует эти логические значения в единицы и нули.
SUMPRODUCT(1/COUNTIF($A$1:$B$3,$A$1:$B$3))
- это конструкция, используемая для подсчета уникальных значений в массиве. Это работает путем взвешивания каждого значения на 1/(the number of times the number appears in the array)
. Это гарантирует, что сумма всех значений, связанных с этим значением, будет равна 1
. Подумай об этом так. Если X появляется n раз и каждый раз считается 1/n
, сумма этих подсчетов будет n*(1/n)=1
. То есть каждое уникальное значение учитывается только один раз.
Итак, имея это в виду, рассмотрим пример формулы =SUMPRODUCT((B1>$A$1:$B$3)/COUNTIF($A$1:$B$3,$A$1:$B$3))
, который присваивает уникальную id 3
к значению 2000
в примере. Шаг за шагом, вот как оценивается формула:
=SUMPRODUCT((2000>{1001,1001,1002,2000,1002,1003})/COUNTIF($A$1:$B$3,$A$1:$B$3))
=SUMPRODUCT({TRUE,TRUE,TRUE,FALSE,TRUE,TRUE}/COUNTIF($A$1:$B$3,$A$1:$B$3))
=SUMPRODUCT({TRUE,TRUE,TRUE,FALSE,TRUE,TRUE}/COUNTIF({1001,1001,1002,2000,1002,1003},$A$1:$B$3))
=SUMPRODUCT({TRUE,TRUE,TRUE,FALSE,TRUE,TRUE}/{2,2,2,1,2,1})
=SUMPRODUCT({1/2,1/2,1/2,0/1,1/2,1/1})
=3