Como faço para combinar o texto de duas células para uma célula?

1

Estou combinando várias fontes de dados que listam nomes de funcionários de forma diferente ("Última, Primeira", "Primeira Última", "Última Primeira", etc.) em uma pasta de trabalho e, portanto, em uma tabela. Eu quero evitar gastar muito tempo manipulando os dados importados.

Eu quero usar uma fórmula que diga se o nome de alguém está na linha (A), independentemente de como o nome é exibido. Abaixo está uma fórmula que eu estava usando, no entanto, não garante que o primeiro e último nome são correspondidos na mesma célula / linha. (O destaque amarelo indica exemplos incorretos).

Alguém tem alguma sugestão ou ideia?

Fórmula:

=IFERROR(IF(MATCH("*"&C3&"*",$A$2:$A$6,0)>=0,IF(MATCH("*"&D3&"*",$A$2:$A$6,0)>=0,1,0)),0)

    
por Crainiac 22.08.2016 / 22:09

4 respostas

2
=SUMPRODUCT(ISNUMBER(SEARCH(C3,Certified))*ISNUMBER(SEARCH(D3,Certified)))

Onde Certified é sua lista na coluna A.

Se a Sensibilidade ao caso ajudar (significando menos falsos positivos sem aumentar os falsos negativos), como seria para alguns exemplos apontados por @Scott em seu comentário abaixo, substitua FIND por SEARCH na fórmula.

=SUMPRODUCT(ISNUMBER(FIND(C3,Certified))*ISNUMBER(FIND(D3,Certified)))

Se você precisa garantir a correspondência de palavras inteiras, recomendamos uma solução VBA.

As funções ISNUMBER(.. retornam uma matriz de TRUE ou FALSE , dependendo se o Sobrenome ou o Primeiro Nome forem encontrados em uma linha.

=ISNUMBER(SEARCH(C3,Certified)) --> {FALSE;TRUE;FALSE;FALSE;FALSE}
=ISNUMBER(SEARCH(D3,Certified)) --> {TRUE;FALSE;FALSE;FALSE;FALSE}

Quando os dois arrays são multiplicados juntos, eles retornam um 1 para TRUE no mesmo local (mesma linha) e 0 para qualquer outra combinação.

Acima, eles retornarão {0;0;0;0;0}

Para linha com Carl James , vemos

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

que quando multiplicado - > {0;0;1;0;0}

Portanto, o SUMPRODUCT retornará uma contagem do número de linhas que possuem o Sobrenome e o Primeiro Nome correspondentes à linha que está sendo testada na segunda tabela. Isso também será ativado se alguém tiver sido inserido mais de uma vez na sua primeira tabela.

    
por 22.08.2016 / 22:19
2

Pesquise os dois nomes ao mesmo tempo. Você precisará fazer duas pesquisas, uma com o primeiro nome na frente e outra com o sobrenome na frente:

=IF(OR(ISNUMBER(MATCH("*" & C3 & "*" & D3 & "*",A:A,0)),ISNUMBER(MATCH("*" & D3 & "*" & C3 & "*",A:A,0))),1,0)

O ISNUMBER retorna TRUE quando uma correspondência é encontrada. Se nenhuma correspondência for encontrada, a MATCH retornará um erro (um não-número).

    
por 22.08.2016 / 22:16
1

Com base na resposta de Scott Craner , sugiro

=IF(OR(ISNUMBER(MATCH(C3 & " " & D3,A:A,0)), ISNUMBER(MATCH(D3 & " " & C3,A:A,0)),
                ISNUMBER(MATCH(D3 & ", " & C3,A:A,0))),1,0)

(digite tudo em uma linha). Isto procura por uma das três apresentações possíveis que você mostra na pergunta:

  • “Nome Sobrenome” ( C3 & " " & D3 )
  • “Nome do Sobrenome” ( D3 & " " & C3 )
  • “Sobrenome, nome” ( D3 & ", " & C3 )

sem arriscar muitos falsos positivos que vêm do uso de curingas ( * ). Claro, isso corre o risco de obter falsos negativos se os nomes são inseridos de qualquer outra forma.

    
por 23.08.2016 / 01:04
0

Mova suas células de resumo e use o texto em colunas para dividi-las por vírgula e espaço, tratando-as como delimitadores separados. Adicione uma coluna para reconcatenar =IF(C2="",CONCATENATE(A2," ",B2),CONCATENATE(C2," ",A2)) .

    
por 22.08.2016 / 23:20