Excel - поиск точного соответствия в строке

В настоящее время я пытаюсь найти формулу, которая решит мою проблему.

Вот статус-кво:

  1. На листе 1, столбец A, у меня есть набор строк, например:

/search.action?gender=men&brand=10177&tag=10203&tag=10336
/search.action?gender=women&brand=11579&tag=10001&tag=10138
/search.action?gender=men&brand=12815&tag=10203&tag=10299
/search.action?gender=women&brand=1396&tag=10203&tag=10513
/search.action?gender=women&brand=11&tag=10001&tag=10073
/search.action?gender=women&brand=1396&tag=10203&tag=10336
/search.action?gender=women&brand=13

  1. На листе 2, столбец A, у меня есть набор строк, таких как:

бренд = 10177
бренд = 12815
бренд = 13
бренд = 1396
бренд = 11579

  1. Наконец, на листе 1 столбец B будет моим "фильтром" с формулой, которую я пытаюсь найти. Цель моей формулы - обнаружить в любой из строк на листе 1, присутствует ли одна из строк на листе 2 (как точное совпадение!). Действительно, теперь он находит только приблизительные совпадения. Как видите, строка 5 не должна ничего возвращать. Но с моей нынешней формулой это так.

Вот формула:

{=IFERROR(INDEX('Sheet 2'!$A$1:$A$5;MATCH(1;COUNTIF(A1;"*"&'Sheet 2'!$A$1:$A$5&"*");0));"")}

Есть идеи по этому поводу?
Обратите внимание, что я не хочу использовать VBA, макросы, а только формулу.

Большое спасибо за вашу помощь!

2 ответа

Решение

Следующее решит вашу проблему, я думаю:

=VLOOKUP(MID(A2,FIND("&",A2)+1,FIND("&",A2,FIND("&",A2)+1)-FIND("&",A2)-1),Sheet2!A:A,1,FALSE)

В основном с помощью функции поиска я определил начало и длину строки между знаками "&". и используется в vlookup.

Еще один момент, который стоит упомянуть - эта формула ищет только первые 2 знака "&".

Для полноты вот еще одно решение, основанное на этом ответе

=INDEX(Sheet2!$A$1:$A$5,MAX(IF(ISERROR(FIND(Sheet2!$A$1:$A$5,A1)),-1,1)*(ROW(Sheet2!$A$1:$A$5)-ROW(Sheet2!$A$1)+1)))

Это немного более общий вопрос, и не имеет значения, сколько существует поисковых тегов.

Однако в его нынешнем виде бренд будет соответствовать 13 на втором листе и 1396 на первом. Чтобы избежать этого, вы можете добавить амперсанд в строку поиска:-

=INDEX(Sheet2!$A$1:$A$5,MAX(IF(ISERROR(FIND(Sheet2!$A$1:$A$5&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A$1:$A$5)-ROW(Sheet2!$A$1)+1)))

Эта формула выдает ошибку #VALUE, если совпадений нет: во избежание этого вам нужно будет поместить в нее оператор IFERROR:-

=IFERROR(INDEX(Sheet2!$A$1:$A$5,MAX(IF(ISERROR(FIND(Sheet2!$A$1:$A$5&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A$1:$A$5)-ROW(Sheet2!$A$1)+1))),"")

Все это формулы массива.

Другие вопросы по тегам