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< br> /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, макросы, а только формулу.

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


person BigBadBaptiste    schedule 20.01.2015    source источник
comment
Звучит так, как будто вы помещаете формулу в лист1 и ищете лист2, но если это так, я не могу понять вашу формулу. Не могли бы вы немного пояснить, пожалуйста?   -  person Tom Sharpe    schedule 20.01.2015
comment
Конечно. Давайте построчно. Формула находится в B1. Я хочу посмотреть в A1, присутствует ли какая-либо из строк на листе 2, а затем отобразить, какая из них (в A1).   -  person BigBadBaptiste    schedule 20.01.2015
comment
Вы имеете в виду Sheet1!B1 и Sheet1!A1? Если это так, моя проблема в том, что ваша формула нигде не ссылается на Лист2, поэтому она не может сравнивать строки в A1 со строками, начинающимися с brand=10177 в Листе2.   -  person Tom Sharpe    schedule 20.01.2015
comment
о, черт возьми... действительно, ты прав... я редактирую свой пост...   -  person BigBadBaptiste    schedule 20.01.2015


Ответы (2)


Я думаю, что следующее решит вашу проблему:

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

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

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

person Dubison    schedule 20.01.2015
comment
Хороший! Кажется, это помогает! Я просто добавил ЕСЛИОШИБКА в начале, чтобы избежать #N/A. Большое спасибо! - person BigBadBaptiste; 20.01.2015
comment
Без проблем. Хорошего дня :) - person Dubison; 20.01.2015

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

=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)))

Эта формула выдает ошибку #ЗНАЧ, если совпадений нет: чтобы избежать этого, вам нужно поместить вокруг нее оператор ЕСЛИОШИБКА:

=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))),"")

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

введите здесь описание изображения

person Tom Sharpe    schedule 21.01.2015
comment
Привет Том, спасибо за ваш вклад. Пробовал, но ожидаемого результата не дал. Ответ от Дубисона прекрасно решил мою проблему. - person BigBadBaptiste; 23.01.2015
comment
Хорошо, ответ @Dubison хорош, и я дал ему +1. Я включу снимок экрана, чтобы показать, что мой работает. - person Tom Sharpe; 23.01.2015