Предполагая, что ваши данные (как показано) в 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