Я не смог найти справку Microsoft, которая объясняет истинное поведение VLOOKUP с параметром range_lookup, установленным в значение "TRUE" (что означает поиск "приблизительного соответствия"). Их ссылка только указывает вам отсортировать таблицу поиска в порядке возрастания, чтобы получить "правильные результаты", но не объясняет, как работает алгоритм, чтобы можно было предсказать его поведение в несортированных таблицах.
Многие статьи онлайн пытаются объяснить, почему сортированная таблица поиска важна, предлагая следующее поведение, когда range_lookup имеет значение TRUE:
- VLOOKUP переходит вниз по списку в крайнем левом столбце, пока не найдет значение поиска, которое больше, чем искомое, затем прекратит поиск.
- VLOOKUP возвращает выходное значение, связанное с искомым значением, найденным в строке НАД выше того, на которое он перестал смотреть.
Это, безусловно, объясняет, почему несортированный список может привести к проблемным результатам. Но все же я решил проверить это, чтобы увидеть, действительно ли это так. Рассмотрим следующий lookuptable с его верхней левой ячейкой в A1:
1 a
99 b
3 c
4 d
Теперь давайте сделаем несколько поисков значений:
Поиск 1: Рассмотрим VLOOKUP(1, A1: B4,2, TRUE) в контексте предложенного алгоритма. VLOOKUP идет вниз по левой колонке, видит 1, продолжает идти, видит 99. Это больше, чем 1. Возвращает значение во втором столбце строки над ним. Хорошо. Алгоритм ожидает возврата «а». Excel возвращает «а».
Поиск 2: С VLOOKUP(2, A1, B4,2, TRUE) VLOOKUP идет вниз по левому столбцу, видит 1, продолжает идти, видит 99. Это больше, чем 2. Возвращает значение во втором столбце строки над ним. Работает по алгоритму. Алгоритм ожидает возврата «а». Excel возвращает «а».
Поиск 3: с VLOOKUP(3, A1, B4,2, TRUE) VLOOKUP идет вниз по левому столбцу, видит 1, продолжает идти, видит 99. Это больше, чем 3. Возвращает значение во втором столбце строки над ним. Работает по алгоритму. Алгоритм ожидает возврата «а». Excel возвращает «а».
Поиск 4: С VLOOKUP(3, A1, B4,2, TRUE) VLOOKUP идет вниз по левому столбцу, видит 1, продолжает идти, видит 99. Это больше, чем 4. Он должен вернуть значение во втором столбце строки над ним. Но это не так. Алгоритм ожидает возврата «a», но Excel возвращает «d»!
Кто-нибудь знает реальный алгоритм?
Изменить: я сделал ошибку, но мои вопросы остаются в силе. Смотрите мой комментарий ниже.