Pesquisar vários valores em uma tabela diferente, dada uma célula contendo vários valores delimitados


1

Eu tenho duas tabelas, que se parecem com isso:

insira a descrição da imagem aqui

Eu gostaria que o Excel usasse o valor na ID company associatedtabela 2 (verde), procurasse na tabela 1 (laranja) e retornasse o valor de Company name, ou vários valores quando várias empresas estivessem associadas à mesma pessoa na tabela 2.

Qual seria a melhor solução?

Respostas:


5

Aqui está uma fórmula que funcionará no Excel 2016, como é. Em versões anteriores do Excel, TEXTJOIN()é necessário um UDF de preenchimento de polimento . (Veja este post para um básico.)


Captura de tela da planilha

Array insira ( Ctrl+ Shift+ Enter) a seguinte fórmula em F2e copie e cole / preencha no restante da coluna:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--MID(SUBSTITUTE(E2,";",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1)))=1),99),A:A,0)))))}

Observe que essa fórmula só funciona se os valores na coluna Aforem realmente armazenados como números. Para valores de texto, a --MID(…)fórmula precisa ser substituída por TRIM(MID(…)).


A fórmula prettified é como segue:

{=
  TEXTJOIN(
  ";",
  TRUE,
  INDEX(
    (B:B),
    N(IF(1,
      MATCH(
        --MID(
          SUBSTITUTE(E2,";",REPT(" ",99)),
          99*(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)
          +(1=ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))),
          99
        ),
        (A:A),
        0
      )
    ))
  )
)}

Notas:

  • A fórmula prettificada realmente funciona se inserida.
  • Os parênteses (A:A)em torno da versão prettified são obrigados a forçar a A:Apermanecer em sua própria linha. O mesmo se aplica para o (B:B).


Para o Excel 2016 (somente Windows), a seguinte fórmula mais simples deve funcionar:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--FILTERXML("<a><b>" & SUBSTITUTE(E2, ";", "</b><b>") & "</b></a>", "//b"),A:A,0)))))}

Assim como a fórmula anterior, esta também funciona apenas com valores armazenados como números. Para valores de texto, basta remover o --da fórmula.


Oi RobinCTS, obrigado pela resposta fornecida, funciona tremendamente. Uma última pergunta relacionada ao acima: como eu tenho a fórmula para adicionar um separador entre os nomes, por exemplo, um ponto-e-vírgula entre o nome da empresa? Muito apreciado.
Lucio

@Lucio Umm, já faz isso. Isso é o que o primeiro ;da fórmula é para. Você também pode alterá-lo para qualquer outra string separadora. PS Se você realmente gostou da minha ajuda, uma vez que você chegar a 15+ reputação não se esqueça de voltar e upvote minha resposta também ;-)
robinCTS

À primeira vista, parece que estou obtendo apenas 1 valor para cada célula na coluna F (1 nome da empresa por célula na coluna F). Eu estava esperando pelo menos algumas células com vários valores separados por um ponto e vírgula. É possível, mas muito improvável, dado o conjunto de dados com o qual estou trabalhando. Vou investigar minuciosamente o arquivo e entrar em contato com você. PS: vai fazer.
Lucio

@Lucio Você precisa inserir a fórmula usando Ctrl+ Shift+ Enter, em vez de apenas Enter. (É por isso que as chaves estão lá - para lembrá-lo de fazê-lo ;-)) PS Não é a causa do seu problema, mas para referência futura eu adicionei informações à resposta sobre números armazenados como texto versus números armazenados como reais números PPS Eu também simplifiquei ligeiramente a primeira fórmula não apre- sentada. (A versão
prettified

Trabalhou 100%. Obrigado pelo esclarecimento.
Lucio
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.