Вам нужно будет перебрать имена и проверить каждое из них, затем вернуть массив положительных находок в индекс, чтобы вернуть массив ответов, а затем выбрать первое. Используйте эту формулу массива:
=INDEX(INDEX(E:E,N(IF({1},MODE.MULT(IF(ISNUMBER(MATCH(TRIM(MID(SUBSTITUTE(A1,";",REPT(" ",999)),(ROW($ZZ$1:INDEX($ZZ:$ZZ,LEN(A1)-LEN(SUBSTITUTE(A1,";",""))))-1)*999+1,999)),D:D,0)),MATCH(TRIM(MID(SUBSTITUTE(A1,";",REPT(" ",999)),(ROW($ZZ$1:INDEX($ZZ:$ZZ,LEN(A1)-LEN(SUBSTITUTE(A1,";",""))))-1)*999+1,999)),D:D,0)*{1,1}))))),1)
Будучи формулой массива, она должна быть подтверждена с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.
Возвращает первое совпадение на основепорядок в A1.
Если прецедентом порядка был список имен (столбец D на моей фотографии), можно использовать более простую формулу:
=INDEX(E:E,AGGREGATE(15,7,ROW($D$1:$D$5)/(ISNUMBER(SEARCH("; "&$D$1:$D$5&";","; " &A1))),1))
Обратите внимание на различную доходность между B3 и C3:
Мы также можем использовать vba.Split()
спростой UDF:
Function MYSPLIT(STR As String, del As String) As String()
MYSPLIT = Split(STR, del)
End Function
Это позволяет использовать более короткую формулу:
=INDEX(INDEX(E:E,N(IF({1},MODE.MULT(IF(ISNUMBER(MATCH(TRIM(MYSPLIT(A1,";")),D:D,0)),MATCH(TRIM(MYSPLIT(A1,";")),D:D,0)*{1;1}))))),1)
Тем не менее формула массива, которая должна использовать Ctrl-Shift-Enter. Поместите код в модуль, прикрепленный к книге.