У меня есть набор ячеек, которые имеют значение для каждой. Эти значения связаны с именем ученика. Я пытаюсь определить 5 самых маленьких учеников, основываясь на этом значении. У меня есть эта формула, чтобы найти самые низкие значения -

= МАЛЫЙ (FilteredData [DARTOPIMaths], СЧЕТЕСЛИ (FilteredData [DARTOPIMaths], "<=" & К2)+1)

и эта формула затем искать имя, которое относится к этому значению -

= ИНДЕКС (SurnameForenameFiltered, MATCH (К3, FilteredData [DARTOPIMaths], 0))

Это хорошо работает, но моя проблема в том, когда у меня есть два студента с одинаковым значением. Затем он дважды сообщает имя. Я пытался сделать значения уникальными без изменения исходного значения, но не могу заставить это работать.

Мне действительно нужно найти пятерку и перечислить имена учеников. Если два студента имеют одинаковое значение, выбираются имена обоих студентов.

Любая помощь будет высоко ценится.

С уважением

2 ответа2

0

Мы можем устранить конфликты с дубликатами. Скажем, у нас есть данные как:

Количество баллов дублируется, поэтому в C1 мы вводим:

 =B1

и в C2 введите:

=(COUNTIF($B$1:B2,B2)-1)*0.0001+B2

и скопируйте вниз:

Все значения в столбце помощника являются уникальными. В E1 введите:

=INDEX(A:A,MATCH(SMALL(C:C,ROW()),C:C,0))

и скопировать вниз. В F1 введите:

=INDEX(B:B,MATCH(SMALL(C:C,ROW()),C:C,0))

и скопируйте вниз:

Эта модификация подхода с дублирующимися значениями устраняет необходимость в формулах массива.

0

Вот один из способов сделать это (я скопировал таблицу, которую использовал @GaryStudent).

  • Определите, какое "низшее" значение вы хотите, и поместите это значение в D1 (5 в этом примере)
  • Создайте массив результатов TRUE/FALSE зависимости от того, является ли оценка меньше или равна d1 й самой низкой оценке
  • умножьте этот массив на массив номеров строк, чтобы получить соответствующую строку
  • добавление 1/1/(array) изменяет это на массив ошибок DIV/0 и номер строки.
  • Используйте аргумент SMALL агрегатной функции для возврата только тех значений, которые НЕ являются ошибками.
  • Используйте этот результат, чтобы проиндексировать таблицу и вернуть как имя, так и оценку.
  • Я использовал структурированные ссылки, как и вы.

Обратите внимание, что это может вернуть более пяти студентов, с учетом возможности связей

F1: =IFERROR(INDEX(StudentScores[#All],AGGREGATE(15,6,1/1/(StudentScores[Score] <= SMALL(StudentScores[Score],$D$1))*ROW(StudentScores),ROWS($1:1)),1),"")

G1: =IFERROR(INDEX(StudentScores[#All],AGGREGATE(15,6,1/1/(StudentScores[Score] <= SMALL(StudentScores[Score],$D$1))*ROW(StudentScores),ROWS($1:1)),2),"")

Конечно, вы также можете использовать Advanced Filter с формулой в качестве критерия и записать результаты в "НОВОЕ" местоположение. Но это может быть не так динамично, как вам нужно.

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