Хотя есть несколько способов сделать это с помощью встроенных возможностей или формул Excel, ни один из них не является особенно привлекательным.
Основная идея состоит в том, чтобы разбить на разные ячейки элементы «Account #», которые на самом деле включают в себя несколько учетных записей, выполнить отдельный поиск имени представителя для каждой из этих включенных учетных записей, а затем выбрать успешные поиски, если таковые имеются. Разделение можно выполнить с помощью команды "Текст в столбцы" на вкладке "Данные" или с помощью набора формул синтаксического анализа строк. "Выделение" успешных поисков может быть выполнено с помощью вложенных IF(ISERROR(...))
или, возможно, более экзотической формулы массива.
Решение VBA является разумной альтернативой здесь.
Следующая пользовательская функция принимает в качестве аргументов строку (или ссылку на ячейку на строку), которая включает одну или несколько учетных записей и ссылку на диапазон поиска; он возвращает имя представителя, если в строке есть совпадение с учетной записью. Необязательный третий аргумент может использоваться для указания разделителя между учетными записями в строке учетной записи. Если ничего не указано, функция использует разделитель по умолчанию запятой и пробела (",").
Функция будет возвращать имя представителя для первого найденного соответствия учетной записи, игнорируя любые совпадения, которые могут быть найдены для других учетных записей в строке учетной записи. Если совпадение не найдено, функция возвращает значение #VALUE! ошибка.
Option Explicit
Function AcctRepLookup(Accts As String, RepLookUpRange As Range, Optional Separator As Variant) As Variant
Dim acctArray As Variant
Dim acct As Variant
Dim lookupArray As Variant
Dim i As Long
If IsEmpty(Separator) Then
Separator = ", "
End If
acctArray = Split(Accts, Separator) 'put acct list into array
lookupArray = RepLookUpRange.Value 'put lookup table into array
For Each acct In acctArray 'loop through accounts
For i = LBound(lookupArray) To UBound(lookupArray) 'loop through lookup table
If UCase(acct) = UCase(lookupArray(i, 1)) Then
AcctRepLookup = lookupArray(i, 2) 'a match:) exit with rep name
Exit Function
End If
Next i
Next acct
AcctRepLookup = CVErr(xlErrValue) 'no match:( exit with error
End Function
Чтобы установить функцию в используемую книгу, сначала выберите параметр Visual Basic (первый элемент слева) на вкладке «Разработчик» ленты, а затем выберите «Вставить / Модуль» в строке меню. Вставьте функцию в появившуюся область кода. ,