Найти 2 лучших результата и вернуть соответствующие смежные значения из массива строк - PullRequest
0 голосов
/ 08 мая 2019

У меня есть ряд значений с оценками и информацией о слоях в текстовом формате в соседних ячейках.Я хочу найти наивысшую оценку и вернуть соседнюю ячейку с текстовой информацией, а также, чтобы найти вторую наивысшую оценку с информацией о соседней ячейке, обратите внимание, что две верхние могут иметь одинаковую оценку, но они должны иметь разные текстовые значения.

Я пробовал формулы индекса и соответствия.

=INDEX(Table2[@],MATCH(MAX(Table2[@]),Table2[@],0)+1)

Пример макета данных

Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer
7       River   6       Lake    7       Coastal 8       Canal   6       Lake    7       River   10      Reservoir   8   Canal   10      Estuary

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Ответ ОБНОВЛЕН, чтобы отразить макет данных

Не используя формулу массива, но используя формулу, которая выполняет операции с массивами, вы можете использовать агрегат.В основном это тот же процесс, что и в ответе JvdV, но используется другая формула.

Ссылки на ячейки основаны на информации на скриншоте ниже, настройте их в соответствии с вашими потребностями.

Чтобы получить наивысшие баллы, AGGREGATEможет использоваться для извлечения определенных значений из отсортированного списка, используя уравнения 14 или 15, которые сортируют информацию по убыванию или возрастанию соответственно.То же, что функция Large или Small.В этом случае функция выглядит следующим образом:

=AGGREGATE(14,6,$B$5:$S$5,ROW(A1))

Поместите приведенную выше формулу в ячейку C10 и, при необходимости, скопируйте ее.

Получив значения, которые вы хотите извлечь из списка, выможно снова использовать AGGREGATE, чтобы получить их соответствующие номера столбцов, а затем вывести эти номера столбцов в формулу INDEX, чтобы получить соответствующие текстовые значения.Помните, что вам нужно добавить +1 к номеру столбца, так как нужный текст находится в столбце справа.COUNTIF используется в конце, чтобы иметь дело с дубликатами.Главный вопрос: если у вас было более двухстороннего связывания для первого, хотите ли вы, чтобы отображались первые два в списке или отображались последние два в списке?Разница будет в том, будет ли использоваться 14 или 15 для функции AGGREGATE.В этом примере будут использованы первые два в списке.Если вы хотите, чтобы последние два изменили номер формулы в AGGREGATE.

=INDEX($5:$5,AGGREGATE(15,6,COLUMN($B$5:$S$5)/($B$5:$S$5=C10)+1,COUNTIF($C$10:C10,C10)))

Поместите формулу выше в ячейку D10 и, при необходимости, скопируйте.

Если вы посмотрите на формулы, используемые JvdVи этот ответ, они в основном одинаковы.Большая разница состоит в том, что формулы JvdV являются формулой ARRAY и требуют CTRL + SHIFT + ENTER для подтверждения формулы и просто требуется ENTER для этой формулы.

В любом случае в операциях с массивами следует избегать полных ссылок на столбцы / строки, так как это приведет к чрезмерным вычислениям.Обратите внимание, что для этого ответа полная ссылка на строку $ 5: $ 5 использовалась вне функции AGGREGATE, но внутри AGGREGATE использовался определенный диапазон ($ B $ 5: $ S $ 5)

POC

1 голос
/ 08 мая 2019

Я считаю, что это может быть немного сложнее, чем вы ожидали сначала. Вот мои шаги:

Пример данных:

enter image description here

Формула в E1:

=LARGE(TestTable[ColumnA],ROW())

Формула в D1:

{=INDEX(TestTable[ColumnB],SMALL(IF(TestTable[ColumnA]=E1,ROW(TestTable[ColumnA])-ROW(A$1)),COUNTIF(E$1:E1,E1)))}

Перетащите вниз обе формулы. Обратите внимание, что последний является массивом и должен быть введен через Ctrl Shift Enter

Мне любопытно узнать, есть ли у меня другие, более простые способы!

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