У меня есть VLOOKUP который ищет номер Account # и возвращает Rep . Поле Account # содержит исторические данные (каждая учетная запись, включая неактивные). Как я могу настроить VLOOKUP чтобы увидеть имя представителя, проверяя каждую Account #?

Account #       | Email            | Rep Name |   Match Name
12345           | email@email.com  | Rep Name | Rep Name Match
4564566, 45678  | email@email.com  | Rep Name |      #N/A

2 ответа2

0

Не существует максимального количества учетных записей. Поиск будет проверять имя представителя по списку «активных» учетных записей (обычно на отдельной вкладке). Некоторые аккаунты имеют более 5 аккаунтов. В экспорте нет жестко заданного максимума.

0

Хотя есть несколько способов сделать это с помощью встроенных возможностей или формул 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 (первый элемент слева) на вкладке «Разработчик» ленты, а затем выберите «Вставить / Модуль» в строке меню. Вставьте функцию в появившуюся область кода. ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .