Obtenha vários valores de pesquisa em uma única célula (com e sem repetição)

Podemos pesquisar e retornar vários valores em uma célula no Excel (separados por vírgula ou espaço)?

Esta pergunta já me foi feita várias vezes por muitos de meus colegas e leitores.

O Excel tem algumas fórmulas de pesquisa incríveis, como VLOOKUP, INDEX / MATCH (e agora XLOOKUP), mas nenhuma delas oferece uma maneira de retornar vários valores correspondentes. Tudo isso funciona identificando a primeira correspondência e retornando-a.

Então, fiz um pouco de codificação VBA para chegar a uma função personalizada (também chamada de Função Definida pelo Usuário) no Excel.

Atualizar: Depois que o Excel lançou matrizes dinâmicas e funções incríveis, como UNIQUE e TEXTJOIN, agora é possível usar uma fórmula simples e retornar todos os valores correspondentes em uma célula (abordado neste tutorial).

Neste tutorial, vou mostrar como fazer isso (se você estiver usando a versão mais recente do Excel - Microsoft 365 com todas as novas funções), bem como uma maneira de fazer isso caso você esteja usando versões mais antigas ( usando VBA).

Então vamos começar!

Pesquisar e retornar vários valores em uma célula (usando fórmula)

Se você estiver usando o Excel 2016 ou versões anteriores, vá para a próxima seção, onde mostro como fazer isso usando o VBA.

Com a assinatura do Microsoft 365, seu Excel agora tem funções e recursos muito mais poderosos que não existiam nas versões anteriores (como XLOOKUP, Dynamic Arrays, funções UNIQUE / FILTER, etc.)

Portanto, se você estiver usando o Microsoft 365 (anteriormente conhecido como Office 365), você pode usar os métodos abordados nesta seção para pesquisar e retornar vários valores em uma única célula no Excel.

E como você verá, é uma fórmula muito simples.

Abaixo, tenho um conjunto de dados onde tenho os nomes das pessoas na coluna A e o treinamento que eles fizeram na coluna B.

Clique aqui para baixar o arquivo de exemplo e acompanhar

Para cada pessoa, quero descobrir qual treinamento ela completou. Na coluna D, tenho a lista de nomes exclusivos (da coluna A) e quero pesquisar e extrair rapidamente todo o treinamento que cada pessoa fez e obtê-los em um único conjunto (separados por uma vírgula).

Abaixo está a fórmula que fará isso:

= TEXTJOIN (",", VERDADEIRO, SE (D2 = $ A $ 2: $ A $ 20, $ B $ 2: $ B $ 20, ""))

Após inserir a fórmula na célula E2, copie-a para todas as células onde deseja os resultados.

Como essa fórmula funciona?

Deixe-me desconstruir essa fórmula e explicar cada parte de como ela se junta nos dá o resultado.

O teste lógico na fórmula IF (D2 = $ A $ 2: $ A $ 20) verifica se o nome da célula D2 é o mesmo que no intervalo A2: A20.

Ele passa por cada célula no intervalo A2: A20 e verifica se o nome é o mesmo na célula D2 ou não. se for o mesmo nome, retorna VERDADEIRO, caso contrário, retorna FALSO.

Portanto, esta parte da fórmula fornecerá uma matriz conforme mostrado abaixo:

{TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE}

Como queremos apenas obter o treinamento para Bob (o valor na célula D2), precisamos obter todo o treinamento correspondente para as células que estão retornando TRUE na matriz acima.

Isso é feito facilmente especificando [valor_se_verdadeiro] parte da fórmula IF como o intervalo que contém o treinamento. Isso garante que, se o nome na célula D2 corresponder ao nome no intervalo A2: A20, a fórmula SE retornará todo o treinamento que a pessoa fez.

E sempre que a matriz retorna um FALSO, especificamos o valor [valor_se_falso] como “” (em branco), portanto, ele retorna um espaço em branco.

A parte IF da fórmula retorna a matriz conforme mostrado abaixo:

{“Excel”; ””; ””; ”PowerPoint”; ””; ””; ””; ””; ””; ””; ”;” ”;” ”;” ”;” ”;” ”; ””; ””; ””}

Onde tem os nomes do treinamento que Bob fez e espaços em branco sempre que o nome não era Bob.

Agora, tudo o que precisamos fazer é combinar esses nomes de treinamento (separados por uma vírgula) e retorná-los em uma célula.

E isso pode ser feito facilmente usando a nova fórmula TEXTJOIN (disponível no Excel2021-2022 e Excel no Microsoft 365)

A fórmula TEXTJOIN leva três argumentos:

  • o Delimitador - que é “,” em nosso exemplo, pois quero que o treinamento seja separado por uma vírgula e um caractere de espaço
  • TRUE - que diz à fórmula TEXTJOIN para ignorar as células vazias e apenas combinar aquelas que não estão vazias
  • A fórmula If que retorna o texto que precisa ser combinado

Se você estiver usando o Excel no Microsoft 365 que já possui matrizes dinâmicas, basta inserir a fórmula acima e pressionar Enter. E se você estiver usando o Excel2021-2022, você precisa inserir a fórmula e segurar as teclas Control e Shift e pressionar Enter

Clique aqui para baixar o arquivo de exemplo e acompanhar

Obtenha vários valores de pesquisa em uma única célula (sem repetição)

Uma vez que a fórmula UNIQUE está disponível apenas para Excel no Microsoft 365, você não poderá usar este método no Excel2021-2022

Caso haja repetições em seu conjunto de dados, conforme mostrado abaixo, você precisa alterar um pouco a fórmula para obter apenas uma lista de valores únicos em uma única célula.

No conjunto de dados acima, algumas pessoas fizeram o treinamento várias vezes. Por exemplo, Bob e Stan fizeram o treinamento em Excel duas vezes, e Betty fez o treinamento em MS Word duas vezes. Mas em nosso resultado, não queremos que o nome de um treinamento se repita.

Você pode usar a fórmula abaixo para fazer isso:

= TEXTJOIN (",", VERDADEIRO, ÚNICO (SE (D2 = $ A $ 2: $ A $ 20, $ B $ 2: $ B $ 20, "")))

A fórmula acima funciona da mesma maneira, com uma pequena alteração. usamos a fórmula IF dentro da função UNIQUE para que, no caso de haver repetições no resultado da fórmula if, a função UNIQUE o remova.

Clique aqui para baixar o arquivo de exemplo

Pesquisar e retornar vários valores em uma célula (usando VBA)

Se você estiver usando o Excel 2016 ou versões anteriores, não terá acesso à fórmula TEXTJOIN. Portanto, a melhor maneira de pesquisar e obter vários valores correspondentes em uma única célula é usando uma fórmula personalizada que você pode criar usando o VBA.

Para obter vários valores de pesquisa em uma única célula, precisamos criar uma função em VBA (semelhante à função VLOOKUP) que verifica cada célula em uma coluna e, se o valor de pesquisa for encontrado, adiciona-o ao resultado.

Aqui está o código VBA que pode fazer isso:

'Código por Sumit Bansal (https://trumpexcel.com) Função SingleCellExtract (Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer) Dim i As Long Dim Result As String For i = 1 To LookupRange.Columns (1) .Cells .Count If LookupRange.Cells (i, 1) = Lookupvalue Then Result = Result & "" & LookupRange.Cells (i, ColumnNumber) & "," End If Next i SingleCellExtract = Left (Result, Len (Result) - 1) Função Final

Onde colocar este código?

  1. Abra uma pasta de trabalho e clique em Alt + F11 (isso abre a janela do Editor VBA).
  2. Nesta janela do Editor VBA, à esquerda, há um explorador de projeto (onde todas as pastas de trabalho e planilhas são listadas). Clique com o botão direito em qualquer objeto na pasta de trabalho onde deseja que este código funcione e vá para Inserir -> Módulo.
  3. Na janela do módulo (que aparecerá à direita), copie e cole o código acima.
  4. Agora você está pronto. Vá para qualquer célula da pasta de trabalho e digite = SingleCellExtract e insira os argumentos de entrada necessários (ou seja, LookupValue, LookupRange, ColumnNumber).

Como essa fórmula funciona?

Esta função funciona de forma semelhante à função VLOOKUP.

Leva 3 argumentos como entradas:

1. Valor de pesquisa - Uma string que precisamos pesquisar em um intervalo de células.
2. LookupRange - Uma matriz de células de onde precisamos buscar os dados ($ B3: $ C18 neste caso).
3. ColumnNumber - É o número da coluna da tabela / matriz da qual o valor correspondente deve ser retornado (2 neste caso).

Quando você usa esta fórmula, ela verifica cada célula na coluna mais à esquerda no intervalo de pesquisa e quando encontra uma correspondência, adiciona ao resultado na célula na qual você usou a fórmula.

Lembrar: Salve a pasta de trabalho como uma pasta de trabalho habilitada para macro (.xlsm ou .xls) para reutilizar essa fórmula novamente. Além disso, essa função estaria disponível apenas nesta pasta de trabalho e não em todas as pastas de trabalho.

Clique aqui para baixar o arquivo de exemplo

Aprenda a automatizar tarefas repetitivas chatas com VBA no Excel. Junte-se a Curso Excel VBA

Obtenha vários valores de pesquisa em uma única célula (sem repetição)

Existe a possibilidade de que você tenha repetições nos dados.

Se você usar o código usado acima, ele também repetirá o resultado.

Se você deseja obter o resultado sem repetições, é necessário modificar um pouco o código.

Aqui está o código VBA que fornecerá vários valores de pesquisa em uma única célula sem nenhuma repetição.

'Code by Sumit Bansal (https://trumpexcel.com) Função MultipleLookupNoRept (Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer) Dim i As Long Dim Result As String For i = 1 To LookupRange.Columns (1) .Cells .Count If LookupRange.Cells (i, 1) = Lookupvalue Then For J = 1 To i - 1 If LookupRange.Cells (J, 1) = Lookupvalue Then If LookupRange.Cells (J, ColumnNumber) = LookupRange.Cells (i, ColumnNumber) Then GoTo Skip End If End If Next J Result = Result & "" & LookupRange.Cells (i, ColumnNumber) & "," Skip: End If Next i MultipleLookupNoRept = Left (Result, Len (Result) - 1) End Função

Depois de colocar este código no Editor VB (como mostrado acima no tutorial), você será capaz de usar o MultipleLookupNoRept função.

Aqui está um instantâneo do resultado que você obterá com este MultipleLookupNoRept função.

Clique aqui para baixar o arquivo de exemplo

Neste tutorial, abordei como usar fórmulas e VBA no Excel para encontrar e retornar vários valores de pesquisa em uma célula no Excel.

Embora possa ser feito facilmente com uma fórmula simples se você estiver usando o Excel na assinatura do Microsoft 365, se você estiver usando versões anteriores e não tiver acesso a funções como TEXTJOIN, você ainda pode fazer isso usando VBA criando seu própria função personalizada.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave