Лучший подход
Вы должны использовать INDEX(MATCH)
вместо VLOOKUP
, потому что VLOOKUP
ведет себя непредсказуемым образом, что вызывает ошибки, такие, как тот, который вы, вероятно, испытывающего.
INDEX (<return array> , MATCH (<lookup value> , <lookup array> , 0))
Использование 0
в качестве последнего аргумента MATCH
означает, что матч должен быть точным
Here некоторые более подробной информации о INDEX(MATCH)
-ную
Дополнительная
Добавить +0
, чтобы преобразовать значение в число.
Это может быть (опасно) продлено с IFERROR()
превратить нечисловой текст в ноль:
=A2+0
=IFERROR(A2+0,0)
Для обратного, вы можете сцеплять пустую строку &""
, чтобы заставить значение быть строка.
Примечания
Если 0
не используется в качестве последнего аргумента MATCH
, он найдет все виды неожиданных «спичек» .. и хуже, он может найти другое значение, даже если точное совпадение присутствует.
Часто бывает полезно выполнить дополнительную работу, чтобы определить, есть ли дубликаты в столбце поиска MATCH
, иначе будет найдено первое найденное значение (см. Пример).
Справка с MATCH
исходит от here, в частности, логики соответствия 3-го аргумента.
Для преобразования на месте vba - единственный путь. С формулой вам нужно будет поместить формулу в другую ячейку. '= Значение (A1)' –
Как правило, используйте INDEX (MATCH()) над VLOOKUP, поскольку он ведет себя гораздо более предсказуемым образом. – ti7