В настоящее время я использую MATCH() в столбцах формул Excel 2016, таких как:
= MATCH( [@[ITEM_CODE]], IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]], 0 )
Результат по сути является внешним ключом. Он используется в других столбцах с выражениями INDEX() или OFFSET() чтобы связать текущую строку с соответствующей строкой в другой таблице.
Некоторые значения поиска содержат знаки препинания, включая специальные символы подстановки * ? и ~ . Это вызывает непреднамеренное соответствие. Реальным примером является код товара *XA1 , который непреднамеренно соответствует коду товара 1SC0021REXA1 в другой таблице.
Мое текущее решение для примера выше:
= MATCH(
SUBSTITUTE( SUBSTITUTE( SUBSTITUTE( [@[ITEM_CODE]], "~", "~~" ), "*", "~*" ), "?", "~?" ),
IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]],
0
)
Что мне не нравится? Легко забыть при написании выражений INDEX(MATCH()) , легко ошибиться (порядок имеет значение) и просто неуклюже и трудно читаемо. Но я не нашел альтернативы MATCH() без подстановочных знаков или даже способа упростить выражение подстановки, не создавая при этом сложности в других местах, таких как написание пользовательской функции в VBA.


