Как правильно найти значение через VLOOKUP()?

Автор ShevchAe, 12 февраля 2019, 13:14

0 Пользователи и 1 гость просматривают эту тему.

ShevchAe

Всем привет!
Пишу вот такую штуку - =LOOKUP(D4;$A$4:$A$546;$B$4:$B$546)
Она берёт значение из D4, ищет его в массиве A4:A546, и возвращает для найденной строки значение из столбца B.
Но, почему-то эта конструкция работает только, если в D4 5ти значное число, если меньше, то возвращает #N/A..

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

На всякий случай прикрепил сам файл - https://www.dropbox.com/s/rpqp1xbwpv5rztj/52538%20%283%29.ods?dl=0
В нём каждая строка - это страница, для каждой страницы указан ID родительской страницы, но названия её нет. Формулой выше я беру id родительской страницы, ищу страницу с таким ID и вывожу её название.
Можно увидеть ошибку, например в ячейке G44:
=LOOKUP(D44;$A$1:$A$546;$B$1:$B$546)

в D44 - 2260
в столбце А есть такое значение четырьмя строками выше, в столбце B соответствующее ему значение "Самосвальные полуприцепы". Так почему возвращает #N/A?

LibreOffice Calc 6.2.0 MacOS

Заранее огромное спасибо!

mikekaganski

Вектор значений, где идёт поиск, для функции LOOKUP обязан быть отсортирован по возрастанию.

В Вашем случае, поскольку векторы поиска и результата рядом, можно воспользоваться VLOOKUP с указанием четвёртого параметра Sorted = 0.
С уважением,
Михаил Каганский

Yakov


ShevchAe

Спасибо за суперскоростной ответ)
Однако =VLOOKUP(D44;$A$4:$A$546;$B$4:$B$546;0) возвращает #VALUE!, а =LOOKUP(D44;$A$4:$A$546;$B$4:$B$546;0) - Err:504

mikekaganski

Я боюсь, формула из ответа 2 не сможет работать.
=VLOOKUP(D4;$A$4:$B$546;2;0)

Обратите внимание, как VLOOKUP обрабатывает параметры 2 и 3.
С уважением,
Михаил Каганский

ShevchAe

Спасибо огромное!
=VLOOKUP(D4;$A$4:$B$546;2;0)
Работает!  :beer:

Yakov

Тогда переименую тему в  "Как правильно найти значение через VLOOKUP()?"

ShevchAe

Цитата: mikekaganski от 12 февраля 2019, 13:38Я боюсь, формула из ответа 2 не сможет работать.
Код:
=VLOOKUP(D4;$A$4:$B$546;2;0)

Обратите внимание, как VLOOKUP обрабатывает параметры 2 и 3.

Если можно, ещё один вопрос:
Теперь, получив название родительской страницы товара, я хочу найти ещё родительскую страницу этой страницы,
Пишу так:
VLOOKUP(VLOOKUP(VLOOKUP(D333;$A$4:$B$546;2;0);$A$4:$D$546;2;0);$A$4:$B$546;2;0)

По моей логике - я получаю значение родительской страницы данного товара, для простоты X
X=VLOOKUP(D333;$A$4:$B$546;2;0)

Используя это значение, я получаю значение Id родительской страницы этой страницы, назовём это Y:
Y = VLOOKUP(X;$A$4:$D$546;2;0)

И используя это id я ищу название этой страницы
VLOOKUP(Y;$A$4:$B$546;2;0)

Получает то, что я написал выше. И снова я получаю #N/A

mikekaganski

#8
Что такое "родительская страница"? В Calc нет "страниц" (до тех пор, пока на печать не выводим); пожалуйста, пользуйтесь терминологией, понятной другим.
(понял - это название столбца D.)

Внутренний вызов VLOOKUP даёт Вам строку из столбца B, соответствующую числу D333 в столбце A. ОК - а теперь давайте зачем-то поищем эту строку из B снова в столбце A, и если найдём, возьмём значение из B рядом. (Странно, почему не находит?) И повторим эту странную операцию ещё раз.

Ещё раз - обратите внимание, как обрабатывает VLOOKUP параметры 2 и 3. В параметре 2 передаётся прямоугольный массив; в параметре 3 передаётся номер столбца в этом массиве. Поиск идёт всегда в первом столбце переданного массива (поэтому если надо искать, скажем, в столбце X, то и массив должен быть $X$1:$Z$5). А вот от параметра 3 зависит, из какого столбца будем брать результат справа от найденного значения - и если передано $A$4:$D$100, и нам нужно значение из D, то третий параметр должен быть 4, а не 2.
С уважением,
Михаил Каганский

bigor

Т.е. вначале мы искали значение столбца B, соответствующие значению столбца D. А теперь вы хотите по по этому найденному значению, найти опять значение столбца D? Или я что-то не так понимаю?
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут