Я сейчас пользуюсь 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.
[ITEM_CODE]=IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]]
выглядит для меня как формула массива. Но это не требует CSE?