2016-08-03 4 views
2

Итак, у меня есть довольно сложная книга.Функция Microsoft LOOKUP просто ... не работает?

Лист 1: База данных, в которой пользователь вводит список инструментов, а также некоторые данные об инструментах в вертикальной колонке.

Лист 2: Лист, содержащий ту же информацию, что и лист 1, но отображает его в другом формате. Заполнятся автоматически на основе записей из листа 1. (не полезно в этом вопросе)

Там существует макрос на листе 1, который выполняется при нажатии на кнопку. Этот макрос принимает каждый столбец из Листа 1 и создает новый лист для каждого столбца. Каждый новый лист, Лист 3, переименовывается в первое значение в столбце Листа 1, которое он представляет.

  • т.е. Есть 4 колонки в листе 1 с первым значением в каждом столбце существа: LS-АЛЬФА, LS-БРАВО, LS-CHARLIE, LS-DELTA. Мой макрос создаст 4 новых листа, называемых LS-ALPHA, LS-BRAVO, LS-CHARLIE, LS-DELTA.

Первая ячейка (технически H2) на каждом из новых листов содержит формулу для ссылки на название листа.

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255) 
  • т.е. H2 на листе LS-ALPHA будет на самом деле сказать, "LS-АЛЬФА", H2 на листе LS-BRAVO скажет LS-BRAVO и т.д.

Каждая другая ячейка данных на новом листе автоматически будет искать это значение на основном листе (лист 1), чтобы определить, из какого столбца он находится. Затем он будет ниже этого значения и получит содержимое из некоторых строк x ячейки ниже.

=LOOKUP(H2,'Database (Cols)'!D2:AN2,'Database (Cols)'!D3:AN3) 

Это работает абсолютно отлично. Он делает все хорошо.

За исключением, не всегда.

  • Если я переименовал столбцы в «LS-A, LS-B, LS-C, LS-D», он работает. Если я переименую столбцы в «LS-AA, LS-AB, LS-AC, LS-AD», он работает. Если я переименую столбцы в «LS-AAA, LS-AAB, LS-AAC, LS-AAD», он будет работать.

Однако если переименовать столбцы в чем-то вроде "LS-TTF, LS-TTD, LS-TSD, LS-СБТ" все они сломаны как-то .... Ни одна из ссылок на листов работа больше. Некоторые из них указывают на неправильный столбец, если они даже показывают что-то. Этот вопрос, который у меня есть, невероятно необычен. Я не знаю, почему эти имена ломают его, в частности, и я не знаю, какие другие имена также нарушат его.

Что происходит, когда он «ломается»: Все ссылки, похоже, обнаруживают последний доступный столбец в LOOKUP. Три из четырех листов используют значения из четвертого столбца, если они не должны. Затем один лист просто дает мне ошибки (# N/A). Когда я перехожу к расчету, он ищет правильное значение в функции LOOKUP, он просто не возвращает правильную вещь ....

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

Рабочие: https://drive.google.com/file/d/0B9zbU-BeMQNfSmRrWVhKVW9RN3M/view?usp=drivesdk

Сломанное: https://drive.google.com/file/d/0B9zbU-BeMQNfd1FUemwxQjQwMEE/view?usp=drivesdk

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

+0

Я не вижу никакой разницы. Где это? –

+0

«Сломанные» листы показывают дельта во всех значениях. (За исключением того, что по какой-либо причине один лист показывает # N/A) Листы «Рабочие» показывают правильные соответствующие значения; «alpha #» «beta #» и т. д. –

+0

База данных выглядит следующим образом: https://s32.postimg.org/bld2rekn9/database.png Правильной записью будет LS-TSF, показывающий «дельта», например : https://s32.postimg.org/b7bqrt0jp/correct.png Недопустимая запись будет LS-TTF, показывающая «delta» вместо «alpha»: https://s32.postimg.org/5lpbnqzut/ incorrect.png Если имена столбцов изменены, как в рабочей таблице, эта проблема не возникает –

ответ

4

С помощью для LOOKUP function:

ВНИМАНИЕ: Значения в lookup_vector должны быть размещены в восходящей порядке: ..., -2, -1, 0, 1, 2, .. ., AZ, FALSE, TRUE; в противном случае LOOKUP может не вернуть правильное значение. Верхний и нижний регистры - эквивалент.

Набор значений, которые работают правильно - «LS-A, LS-B, LS-C, LS-D» - в алфавитном порядке. Набор значений, которые работают некорректно - «LS-TTF, LS-TTD, LS-TSD, LS-TSF» - не в алфавитном порядке. Кроме того, LOOKUP не обязательно найти точное совпадение - как указано в справке:

Если функция LOOKUP не может найти Lookup_Value, функция соответствует наибольшее значение lookup_vector, которое меньше или равно to lookup_value.

Чтобы исправить, либо:

  • реорганизовать неработающего набор значений в алфавитном порядке (хотя вы по-прежнему не будет гарантировать точное совпадение), или
  • переключатель с помощью вместо этого - HLOOKUP function. Убедитесь, что параметр Range_lookup является ложным, чтобы требовать точного соответствия. Пример использования: =HLOOKUP(H2,'Database (Cols)'!D2:AN3,2,FALSE)
Смежные вопросы