Excel LOOKUP соответствует неправильной ячейке - PullRequest
0 голосов
/ 06 ноября 2019

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

  Match | John | Pete | Chris |       
 -------|------|------|-------|------- 
      1 | X    |      |       | John  
      2 |      | X    |       | Pete  
      3 | A    |      | X     | Chris 
      4 | X    |      | A     | Chris (!)
      5 |      | X    | A     | Pete  

Легенда: X: будет тренером;A: доступно.

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

Для обзораЯ решил добавить столбец, в котором будет отображаться выбранный тренер. Я использовал следующую формулу: =LOOKUP("X"; B2:D2; B$1:D$1) для строки 2 и скопировал ее в другие строки, чтобы номера строк каждой строки соответствовали строке, в которую была помещена формула.

К моему удивлениюМатч 4 стал назначен Крису, тогда как у Джона X и Крис только A.

Когда я прочитал документацию Microsoft по LOOKUP , я заметил несколько вещей:

  1. LOOKUP имеет векторную форму и форму массива. Microsoft рекомендует использовать HLOOKUP для формы массива, но я использую векторную форму. Я не думаю, что HLOOKUP полезен для меня, так как он ищет только значения в первой строке указанного массива, тогда как моя первая строка содержит значения, которые должны быть возвращены.
  2. Он читает: "Диапазон, который содержит только одну строку или один столбец. ", но также " Важное замечание: Значения в lookup_vector должны быть расположены в порядке возрастания: ..., -2, -1, 0, 1, 2, ..., AZ, FALSE, TRUE; в противном случае LOOKUP может не вернуть правильное значение. Прописные и строчные буквы эквивалентны. "

Я думаю, что именно 2. вызываетвопрос. Я не уверен, как отсортировать параметр диапазона, как A2: A4. Microsoft документирует функцию SORT , но это бета. Кроме того, я думаю, что сортировка строки поиска в любом случае испортит совпадение.

Обходной путь, который я нашел, - это изменение моих кодов на A: назначенный и B: резервный, в котором A и B выбраны в алфавитном порядке. Восходящий. Если я изменю формулы, чтобы использовать искомое значение «A», это дает мне:

  Match | John | Pete | Chris |       
 -------|------|------|-------|------- 
      1 | A    |      |       | John  
      2 |      | A    |       | Pete  
      3 | B    |      | A     | Chris 
      4 | A    |      | B     | John  
      5 |      | A    | B     | Pete  

, что является результатом, который я хочу.

Может кто-нибудь пролить свет на это полностьюнелогичное поведение и / или опишите альтернативные способы достижения этого?

Примечания:

  1. Я забочусь только о том, чтобы поставить 1 X в каждом ряду.
  2. Я видел это в Microsoft Excel для Office 365 MSO (16.0.11328.20362) 64-разрядных и в Microsoft Excel 2016 MSO (16.0.12130.20232) 32-разрядных.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

LOOKUP делает именно то, для чего он был разработан, согласно документации. Вы должны использовать INDEX и MATCH:

=INDEX($B$1:$D$1;MATCH("X";B2:D2;0))

Последний аргумент 0 для MATCH означает, что вы ищете точное совпадение, поэтому данные не нужно сортировать.

2 голосов
/ 06 ноября 2019

LOOKUP выполняет бинарный поиск и поэтому возвращает A. Мы долго обсуждали форум Chandoo.org, который вы можете прочитать здесь: https://chandoo.org/forum/threads/how-vlookup-works.18378/

По сути, он продолжает искать равное или меньшеезначение, а затем продолжает разрезать данные, и, следовательно, он нуждается в сортировке данных.

Вы все еще можете использовать LOOKUP, настроив, как показано ниже.

=LOOKUP(2;1/(B2:D2="X");B$1:D$1)

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