В Excel, как я могу вернуть список значений, которые соответствуют описанию? - PullRequest
0 голосов
/ 25 января 2019

Мой вопрос заключается в том, что я хочу вернуть список значений в столбце B на листе 2 (или в этом случае NBA Players), которые содержат значение «PG» в ячейке A3 на листе 1, из столбца A на листе 2. Я не только хочу, чтобы он совпадал с «PG», но я также хочу, чтобы значение имело зарплату (столбец C), которая составляет от 7100 долл. США (ячейка B2 на листе 1) до 8000 долл. США (ячейка C2) на листе 1). Любая помощь будет оценена.

(Sheet 2) I want to get the information from

(Sheet 1) I want my list to appear

1 Ответ

0 голосов
/ 25 января 2019

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

Функция AGGREGATE состоит из нескольких отдельных функций. В зависимости от того, какой из них вы выберете, он будет выполнять операции с массивами. Я собираюсь предложить формулу 14. В следующем примере будет создан список результатов, отсортированных от наименьшего к наибольшему, который игнорирует значения ошибок, а затем вернется первое значение из списка. Мы перечислим номер строки, которая соответствует ВСЕМ вашим критериям. Итак, основы AGGREGATE выглядят так:

AGGREGATE(Formula #, Error/hidden handling #, Formula, parameter)

Самое сложное - найти правильную формулу. В числитель вы кладете то, что ищете. В знаменатель вы помещаете свои проверки ИСТИНА / ЛОЖЬ. Отделяйте каждую проверку состояния с помощью *. * будет действовать как функция AND То, что делает эту работу, заключается в том, что TRUE / FALSE преобразуются в 1/0, когда они отправляются с помощью математической операции. Так что все, что вы не хотите, это ЛОЖЬ. и все, что делится на FALSE, становится делением на 0, что, в свою очередь, приводит к ошибке. Поскольку AGGREGATE настроен на игнорирование ошибок, в списке будут присутствовать только те вещи, которые соответствуют вашему условию, и, поскольку они делятся на TRUE, равное 1, ваша вещь остается неизменной. Таким образом, агрегатная функция начнет выглядеть следующим образом:

AGGREGATE(14,6,ROW(some range)/((Condition 1)*Condition 2)*...*(Condition N)),1)

Таким образом, как указано выше, 14 установите AGGREGATE для сортировки списка в порядке возрастания. 6 говорит AGGREGATE игнорировать ошибки, а 1 указывает AGGREGATE возвращать первый элемент в отсортированном списке. Если бы это было 2 вместо 1, это возвратило бы вторую позицию. Если вы запросите позицию, превышающую количество элементов в списке, AGGREGATE выдаст ошибку, которая не будет проигнорирована.

Так что теперь, когда есть некоторое понимание того, что делает AGGREGATE, давайте посмотрим, как мы можем применить это к вашим данным. Для начала предположим, что ваши данные находятся в строках 2: 100, а строка 1 является строкой заголовка. Вам придется настроить ссылки в соответствии с вашими данными.

СОСТОЯНИЕ 1

LEFT($A$2:$A$100,2)="PG"

Проверяет, являются ли первые два символа PG. на основании данных на вашем снимке экрана PG был слева от / или был единственной записью. Было также замечание, что в ячейках столбца А была только одна /. Если вам также необходимо проверить, находится ли она после / и с предположением, что она может быть только на одной стороне, а не в обеих одновременно, вы могли бы используйте эту альтернативу для проверки вашего состояния:

(LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG")

В этом случае + выполняет задачу функции ИЛИ. Предостережение, упомянутое ранее, важно, потому что если обе стороны имеют значение ИСТИНА, то вы получите ИСТИНА + ИСТИНА, которая становится 1 + 1, что равно 2, и мы хотим разделить только на 1 или 0. Хотя, чтобы противостоять этому, вы можете пойти с:

MIN((LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG"),1)

СОСТОЯНИЕ 2

Убедитесь, что зарплата в C меньше или равна 80000.

($C$2:$C$100<=80000)

СОСТОЯНИЕ 3

Убедитесь, что заработная плата в C больше или равна значению 71000.

($C$2:$C$100>=71000)

Теперь давайте соберем все это вместе, чтобы получить список номеров строк, соответствующих вашим условиям:

AGGREGATE(14,6,ROW($A$2:$A$100)/MIN((LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG"),1)*($C$2:$C$100<=80000)*($C$2:$C$100>=71000),ROW(A1))

Теперь, если я не обошел скобки в этой формуле, вы можете поместить эту формулу в ячейку и копировать ее до тех пор, пока она не приведет к ошибкам. Когда вы копируете его, единственное, что изменится, это А1 в строке (А1). Он действует как счетчик. 1,2,3 и т. Д., Поэтому вы получите список номеров строк, которые соответствуют вашим критериям. Теперь нам нужно преобразовать эти номера строк в имена.

Чтобы найти имена, функция INDEX - ваш друг здесь. Поскольку он не является частью формулы массива или внутри функции, выполняющей массив, такой как вычисления, можно использовать полную ссылку на столбец. Итак, мы берем нашу формулу, которая генерирует номера строк, и помещаем ее в функцию INDEX, чтобы получить:

INDEX(B:B,Row Number)

INDEX(B:B,AGGREGATE(14,6,ROW($A$2:$A$100)/MIN((LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG"),1)*($C$2:$C$100<=80000)*($C$2:$C$100>=71000),ROW(A1)))

Теперь, если вам не нравится видеть коды ошибок, когда вы копируете их дальше, тогда вы можете поместить все это внутрь и функцию IFERROR, чтобы получить:

IFERROR(formula,What to display in case of an error)

Так что для пустых записей:

IFERROR(INDEX(B:B,AGGREGATE(14,6,ROW($A$2:$A$100)/MIN((LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG"),1)*($C$2:$C$100<=80000)*($C$2:$C$100>=71000),ROW(A1))),"")

и пользовательское сообщение:

IFERROR(INDEX(B:B,AGGREGATE(14,6,ROW($A$2:$A$100)/MIN((LEFT($A$2:$A$100,2)="PG")+(RIGHT($A$2:$A$100,2)="PG"),1)*($C$2:$C$100<=80000)*($C$2:$C$100>=71000),ROW(A1))),"NOT FOUND")

Так что теперь вам просто нужно настроить ссылки в соответствии с вашими данными. Если ваши данные находятся на другом листе, не забудьте указать название листа. Ссылка на B3: C4 станет:

Sheet1!B3:C4

и если в имени листа есть пробел:

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