Excel - поиск точного соответствия в строке
В настоящее время я пытаюсь найти формулу, которая решит мою проблему.
Вот статус-кво:
- На листе 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
- На листе 2, столбец A, у меня есть набор строк, таких как:
бренд = 10177
бренд = 12815
бренд = 13
бренд = 1396
бренд = 11579
- Наконец, на листе 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))),"")
Все это формулы массива.