3

Я прошел через поток Сумма до N-наибольшего значения ряда, и это не совсем то, что мне нужно. например

=SUM(LARGE(Range;1); LARGE(Range;2); …; LARGE(Range;N))

Вопрос в том, имеет ли набор данных 5 чисел, и меня интересует сумма старших четырех. Для этого я просмотрел поток Сумма первых N элементов столбца:

=SUM(OFFSET(AK$1,1,0,AZ1,1))

Там не будет никаких проблем с этим, если все пять записей разные. Но если есть какие-либо 2 записи с одинаковым значением, то я бы хотел взять одну такую запись за сумму.

Другими словами, если 5 чисел 0, 1, 2, 3, 4 и 5, сумма старших 5 равна 15.

Для 2, 3, 4, 2, 5 один и тот же код вернет значение 16, и я хочу, чтобы это значение было 14 (опуская 2, которое повторялось во второй раз)

Как этого добиться?

2 ответа2

2

Ладно, думаю, я понял

 =SUM(IFERROR((LARGE((IF(FREQUENCY(A1:A5,A1:A5),A1:A5)),ROW(INDIRECT("1:5")))),0))

INDIRECT("1:X") определяет X самых больших чисел.

Это формула массива, поэтому CSE Ctrl Shft Entr


Формула должна быть изменена (транспонирована), если вы работаете из строки, а не из столбца -

 =SUM(IFERROR((LARGE((IF(FREQUENCY(TRANSPOSE(A1:E1),TRANSPOSE(A1:E1)),TRANSPOSE(A1:E1))),ROW(INDIRECT("1:5")))),0))
1

Если ваши значения находятся в "диапазоне", то это должно работать:

   =SUMPRODUCT(LARGE(range,{1,2,3,4,5})/COUNTIF(range,LARGE(range,{1,2,3,4,5})))

Вместо того, чтобы считать кратные только один раз, он считает каждое вхождение как Value/TotalOccurences, что имеет тот же чистый эффект.

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