Como identificar casos com dois nomes em uma lista que pode ter até quatro nomes

Como identificar casos com dois nomes em uma lista que pode ter até quatro nomes

Esta questão é um desdobramento de uma pergunta anterior:Fórmula Excel - fórmula de separação de nomes para pessoas que possuem sobrenomes com várias partes:.

Contexto

Tenho uma lista de mais de 20.000 contatos onde existe uma única coluna “Nome completo”. Preciso criar duas colunas para Nome e Sobrenome. No entanto, nem todos os nomes se enquadram nesse padrão simples. A lista inclui nomes como:

David Batte
Guy-Mael Jacobe de Naurois
Jean-Marc Lioutier
Thibaud Le Seguillon
Mrs. Manuela Junghaehnel
Hussain Mohammed Dipu Kabir

Como resultado da pergunta anterior, estou atacando o problema retirando coleções de nomes que se ajustam a padrões específicos aos quais posso aplicar regras de análise apropriadas. Um número relativamente pequeno de padrões me permitirá automatizar a análise da maior parte da lista, tornando o restante uma tarefa mais gerenciável.

Essa questão

Uma parte substancial da lista de nomes completos contém apenas um nome e um sobrenome, que são fáceis de analisar. Meu objetivo com esta pergunta é identificar esses nomes com dois nomes para que possam ser separados do resto da lista.

Responder1

Existem várias maneiras de identificar casos em que os nomes em uma lista contêm apenas dois nomes de componentes, como nome e sobrenome. Essa condição é definida pelos espaços que separam os nomes dos componentes.

Método 1

Esta questão é um desdobramento de uma anterior (Fórmula Excel - fórmula de separação de nomes para pessoas que possuem sobrenomes com várias partes:), onde já discutimos nos comentários a identificação de casos de um único nome, como apenas nome ou sobrenome. Se você já removeu esses nomes da lista, para que cada entrada tenha pelo menos dois nomes, você pode usar uma técnica semelhante aqui e desenvolvê-la.

Esta abordagem procura um espaço e, a partir daí, procura outro espaço. Se conseguir encontrar um segundo espaço, a entrada terá mais de dois nomes de componentes. Se a entrada estiver em A1, a fórmula básica seria:

=FIND(" ",TRIM(A1),FIND(" ",TRIM(A1))+1)

O resultado disso será um número (localização do próximo espaço) ou um #VALUE! erro se não houver um. O valor que! o erro será fácil de detectar e identifica entradas com dois nomes. Observe que ele também identificará entradas de nome único, e é por isso que esse método só funcionará se você já as tiver removido.

Você pode tornar isso mais atraente visualmente testando o resultado para a condição de erro e exibindo uma mensagem de texto para os casos de dois nomes ou um espaço em branco. Envolver a fórmula acima em um teste IF resultaria em uma fórmula como esta:

=IF(ISERROR(FIND(" ",TRIM(A1),FIND(" ",TRIM(A1))+1)),"Just 2","")

Método 2

Outra abordagem é contar os espaços. Na verdade, você poderia usar essa abordagem para encontrar qualquer número específico de espaços; portanto, apenas alterar a contagem de destino permitiria encontrar também as entradas de nome único. Essa abordagem conta espaços eliminando todos os espaços e vendo quantos caracteres a string diminui. A comparação de comprimento produz a contagem de espaços. Você envolve isso com um teste IF para fazer o que quiser com o número resultante. A fórmula para sinalizar entradas com dois nomes (ou seja, espaço único) seria semelhante a esta:

=IF(LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))=1,"Just 2","")

Responder2

Vou deixar um método mais simples quepode não ser o idealpara 20.000 linhas.

  • Divida os nomes por espaços usando Dados -> Texto para Colunas
  • Os nomes serão divididos em quatro colunas A, B, C e D
  • clique em filtrar e filtrar blanksna coluna C
  • você terá apenas os nomes das duas palavras exibidas em A e B. copie-os.
  • você pode juntar os nomes usando=TEXTJOIN(" ",TRUE,A1:B1)

Responder3

Gostaria de sugerir dois métodos possíveis, o primeiro é o Non VBA e o outro é o VBA.

Método 1:

insira a descrição da imagem aqui

Como funciona:

  • Insira esta fórmula na célula H2para criar valores auxiliares (Identifique partes dos nomes) e preencha-o.

=LEN(G2)-LEN(SUBSTITUTE(G2," ",""))

  • Escreva critérios 2na célula H1.
  • Insira esta fórmula de matriz em Cell I2e termine comCtrl+Shift+Entere preencha.

    {=IFERROR(INDEX($G$2:$G$14,SMALL(IF(H$1=$H$2:$H$14,ROW($G$2:$G$14)- MIN(ROW($G$2:$G$14))+1,""), ROW()-1)),"")}

Observação

  • Ao alterar os critérios na célula H1para 1ou 3você pode obter uma lista de dois ou mais nomes de peças.

insira a descrição da imagem aqui


insira a descrição da imagem aqui


Método 2:

Como você está lidando com mais de 20.000 linhas, o VBA (Macro) será o método mais rápido para concluir o trabalho.

Como funciona:

  • Clique com o botão direitoGuia da planilha e clique no menu pop-upVer códigopara obter o editor VB.
  • Copiar colareste código como módulo padrão e, finalmenteCORRERa Macro.

    Sub DeleteMorethan2()
    
    Dim r As Integer, c As Integer, space_count As Integer
    
    For r = 2 To 15
    space_count = 0
    
    For c = 1 To Len(Range("A" & r))
    
       If Mid(Range("A" & r), c, 1) = " " Then space_count = space_count + 1
       If space_count > 1 Then Range("A" & r).ClearContents
    
      Next
    Next
    
    End Sub
    

Você entende isso:

insira a descrição da imagem aqui

Observação

  • Este código está funcionando Rows 2 to 15e editando esta parte For r = 2 To 15, você pode incluir mais linhas.
  • A coluna usada é A, que também é editável.

Além disso, gostaria de sugerir uma fórmula de matriz para recriar a lista de nomes removendo as linhas em branco.

insira a descrição da imagem aqui

  • Insira esta fórmula de matriz em Cell B2e termine comCtrl+Shift+Entere preencha.

    {=IFERROR(INDEX(A$2:A$14,SMALL(IF(A$2:A$14<>"",ROW(A$2:A$14)-ROW(A$2)+1),ROWS(B$2:B2))),"")}

Ajuste as referências de células na fórmula conforme necessário.

informação relacionada