В Excel 2013 я хотел бы найти значение в столбце B в строке, где строка совпадает со строкой в столбце A. Сложность заключается в том, что строки в столбце A могут быть короче искомой строки значения. Пример:
Column A Column B
ABCD- Result1
EF Result2
BCD Result3
Теперь примеры строк, которые должны возвращать...
"Result1": "ABCD-", "ABCD-EFG", "ABCD-H"
"Result2": "EF", "EFG", "EFGHIIJKL"
"Result3": "BCD", "BCDXY"
«ABCD» не должен возвращать никаких результатов.
Предположим, что искомая строка находится в ячейке C1.
Нужно ли мне прибегать к макросу или для этого есть какая-то формула?
ОБНОВЛЕНИЕ: Будет несколько искомых строк, которые фактически будут расположены в столбце на другом листе, и не будет никаких подстановочных знаков в начале. Значение, которое я ищу, может быть размещено в столбце рядом со столбцом с искомыми строками.
ОБНОВЛЕНИЕ2: Предположим, что содержимое столбцов A и B на Листе 1 и содержимое на Листе 2 приведены ниже:
SoughtString ResultFound
ABCD- Result1
EF Result2
BCD Result3
BCDXY Result3
EFG Result2
ABCD-EFG Result1
EFGHIIJKL Result2
ABCD-H Result1
ABCD No match
Скопировав немного измененную формулу массива из принятого ответа в ячейке B2:
=IFERROR(INDEX(Sheet1!B$2:B$4;MATCH(1;COUNTIF(A2;Sheet1!A$2:A$4&"*")*(Sheet1!A$2:A$4<>"");0));"No match")
решение1
Предполагая, что у вас есть данные в строках со 2 по 10, вы можете использовать эту «формулу массива»
=IFERROR(INDEX(B$2:B$10,MATCH(1,COUNTIF(C1,A$2:A$10&"*")*(A$2:A$10<>""),0)),"No match")
подтверждено с CTRL+ SHIFT+ENTER
решение2
Неясно, какую роль играет C1. Если искомые строки уже существуют в столбце, вы можете использовать это как то, что вы показываете как Col A Листа2. Если они находятся где-то еще, вы можете построить Col A, просто ссылаясь на связанную ячейку в другом списке. Например, если список находится в Col Z, начиная со строки 2, A2 будет =Z2
, и вы можете скопировать эту формулу вниз по Col A, чтобы предварительно заполнить больше ячеек, чем вам нужно (они будут оставаться пустыми, пока не понадобятся).
Если искомый список строк создается по одной новой записи за раз, вы можете просто поместить новые записи в следующую позицию в любом списке (Col Z или Col A). Если новые записи должны попадать в C1 и каждая новая запись заменяет предыдущую, вам понадобится макрос или программа VBA для построения списка из записей C1.
Начиная с точки, где искомые строки будут в списке в Col A с помощью любого из этих методов, это то, что будет в Col B. Предположим, что Result1 находится в B2. Формула в B2 будет:
=IF(ISERROR(FIND(Sheet1!A2,A2)),"NO MATCH",IF(FIND(Sheet1!A2,A2)=1,A2,"NO MATCH"))
Скопируйте формулу в столбец B столько раз, сколько вам нужно. Вы можете предварительно заполнить Col B произвольно большим количеством записей, и они останутся пустыми, пока в связанной ячейке в Col A не появится значение, которое даст результат.