VLOOKUP para pesquisar vários valores em uma célula

0

Eu tenho um VLOOKUP que procura um Account # e retorna um Rep . O campo Account # contém dados históricos (todas as contas, inclusive as inativas). Como posso configurar um VLOOKUP para ver o nome do representante, verificando cada Account # ?

Account #       | Email            | Rep Name |   Match Name
12345           | [email protected]  | Rep Name | Rep Name Match
4564566, 45678  | [email protected]  | Rep Name |      #N/A
    
por user225107 17.05.2013 / 19:06

2 respostas

0

Não há um número máximo de contas. A pesquisa verificaria o nome do representante em uma lista de contas 'Ativas' (geralmente em uma guia separada). Algumas contas têm mais de 5 contas. Não há um máximo codificado na exportação.

    
por 18.05.2013 / 22:45
0

Embora haja várias maneiras de fazer isso usando recursos ou fórmulas incorporadas do Excel, nenhuma delas é particularmente atraente.

A idéia básica seria dividir em diferentes células os itens "Conta nº" que realmente incluem várias contas, fazer uma pesquisa de nome de representante separada para cada uma dessas contas incluídas e, em seguida, selecionar a (s) pesquisa (ões) bem-sucedida (s) qualquer. A divisão pode ser feita usando o comando Text-to-Columns na guia Data ou usando um conjunto de fórmulas de análise de string. A "seleção" de pesquisas bem-sucedidas pode ser feita com funções aninhadas IF(ISERROR(...)) ou talvez com uma fórmula de matriz mais exótica.

Uma solução de VBA é uma alternativa sensata aqui.

A seguinte função definida pelo usuário usa como argumentos uma string (ou referência de célula a uma string) que inclui uma ou várias contas e uma referência a um intervalo de pesquisa; ele retorna um nome de representante se houver uma correspondência em uma conta na string. Um terceiro argumento opcional pode ser usado para especificar o separador entre as contas na string da conta. Se nenhum for especificado, a função usa um separador padrão de uma vírgula e espaço (",").

A função retornará o nome do representante para a primeira correspondência de conta que encontrar, ignorando quaisquer correspondências que possam ser encontradas para outras contas na sequência da conta. Se nenhuma correspondência de conta for encontrada, a função retornará um valor de #VALUE! erro.

  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

Para instalar a função na pasta de trabalho que você está usando, primeiro selecione a opção Visual Basic (primeiro item à esquerda) na guia Desenvolvedor da Faixa de Opções e escolha Inserir / Módulo na barra de menus Cole a função no código painel que aparece.

    
por 19.05.2013 / 02:45