Combinando as duas primeiras letras do primeiro nome e as duas primeiras letras do sobrenome

9

Eu tenho uma planilha de nomes de usuário.

O nome e o sobrenome estão na mesma célula da coluna A.

Existe uma fórmula que concatenará as duas primeiras letras do primeiro nome (primeira palavra) e as duas primeiras letras do sobrenome (segunda palavra)?

Por exemplo John Doe, deve se tornar JoDo.

eu tentei

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

mas isso me dá JoDoecomo resultado.

prweq
fonte
2
Leitura essencial: Programadores de falsidades acreditam em nomes
StackOverthrow
Alguma das respostas funciona? (Se sim, você pode por favor marque-o como a resposta clicando a marca de verificação à esquerda do post.)
BruceWayne

Respostas:

15

Sim; supondo que cada pessoa tenha apenas um nome e um sobrenome, e isso sempre é separado por um espaço que você pode usar abaixo:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

Eu só poderia basear essa resposta nessas suposições, pois é tudo o que você forneceu.

Ou se você deseja que um espaço ainda seja incluído:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)
PeterH
fonte
2
@prweq probs, aceitá-la como correta se ele funciona para você
PeterH
Solução mais simples e fácil de entender. (Bem, exceto pelo uso em FIND()vez de SEARCH();-)) Como você está assumindo que sempre existe um separador de espaço, sua segunda fórmula pode ser simplificada para=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS
4
@RajeshS eu sei. É por isso que minha resposta começa comassuming each person only has a First and Last name
PeterH
2
Os programadores de falsidades acreditam em nomes ; Não que isso faria sentido para lidar com todos esses casos, a partir do get-go se o seu software não tem alcance internacional
Aaron
11
Sugiro TRIM(LEFT(A1,2))que o primeiro nome tenha apenas uma letra, mas talvez seja fácil verificar manualmente esses casos especiais.
Engineer Toast
11

E para finalizar, aqui está uma solução que retornará os dois primeiros caracteres do primeiro nome e os dois primeiros do sobrenome, mas também é responsável pelos nomes do meio.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

insira a descrição da imagem aqui

Obrigado a @Kyle pela parte principal da fórmula

Bruce Wayne
fonte
11
Você me venceu ;-) (Já passava da meia-noite e eu preciso dormir - planejava acrescentar isso à minha resposta depois.) Uma ligeira melhora na sua fórmula seria usar um único em ~vez de quatro. Se você estiver preocupado com o fato de um Tilda poder ser usado como parte de um nome (!) Ou, mais provavelmente, ter sido digitado acidentalmente, basta usar um caractere que não aparece em nenhum teclado. Eu prefiro usar §. é outro bom.
robinCTS
@BruceWayne ,, sua fórmula é mais competente ,,, uma vez que está acessando apenas o nome e o nome do meio, ignora o nome do meio ,,, votada por cima ☺
Rajesh S
@RajeshS E as pessoas com nomes em espanhol , como o ex-piloto de F1 Fernando Alonso Díaz, que tem 1 nome, 2 sobrenomes e sem nome do meio? (Ou mesmo o rei Felipe Juan Pablo Alfonso de todos os Santos de Borbón e Grécia ?) #
Chronocidal
2
@Chronocidal agora vamos para baixo o coelho de que os programadores acreditam sobre nomes
BruceWayne
11
@robinCTS - Boa chamada! Peguei a fórmula de outra resposta (editada em) e não me aprofundou muito. Obrigado pelas dicas!
#
9

Esta é outra maneira ...

Captura de tela da planilha

  • Um nome
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Stese
fonte
Você poderia ir ainda mais longe e remover todas as colunas extras, fundindo-los=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH
Sim, eu fiz isso alguns momentos depois!
Stese
Sim, eu notei que você editou a resposta, Resposta agradável!
PeterH
5

Primeiro, gostaria de dizer que a resposta de PeterH é a mais simples e fácil de entender. (Embora minha preferência seja usar em FIND()vez de SEARCH()- digitar dois caracteres a menos ajuda a evitar o RSI ;-))

Uma resposta alternativa que nem os usos MID(), LEFT()nem RIGHT(), mas em vez disso usa REPLACE()para remover as partes indesejadas do nome é a seguinte:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

Explicação:

O interno REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")remove os caracteres do terceiro caractere do sobrenome em diante, enquanto o externo remove os caracteres do terceiro caractere do primeiro nome até e incluindo o espaço.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Adenda 1:

A fórmula acima também pode ser adaptada para permitir um único nome do meio:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

substituindo FIND(" ",A1)por IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)localiza o segundo espaço (iniciando a procura pelo espaço após o primeiro espaço) ou erros de outra forma. localiza o primeiro espaço se não houver um segundo espaço.
IFERROR(find_second_space, FIND(" ",A1))


Esta versão (longa) permite qualquer número de nomes do meio:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

Nesse caso, FIND(" ",A1)é substituído por FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))conta o número de espaços. substitui o último espaço por . encontra o primeiro que é o mesmo que encontrar o último espaço.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

§claro que poderia ser substituído por qualquer caractere que não exista na cadeia de nomes completa. Uma alternativa mais geral e segura seria o uso CHAR(1).)


Observe que, é claro, a resposta de BruceWayne é a solução mais simples e fácil de entender que permite qualquer número de nomes do meio. Bem, foi. Até eu postar minha outra resposta , isso é ;-)


Adenda 2:

Todas as soluções podem ser adaptadas para atender apenas a um nome (se houver um requisito para um resultado de quatro caracteres), agrupando-as em uma IFERROR()função da seguinte maneira:

=IFERROR(solution, alternate_formula)

Observe que o acima é uma fórmula geral de caso e pode ser possível fazer uma modificação mais eficiente em uma solução específica. Por exemplo, se o requisito, no caso de um único nome, for unir as duas primeiras letras às duas últimas, a resposta de PeterH poderá ser adaptada com mais eficiência desta maneira:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


Para permitir o uso de uma única letra, nome ou inicial (assumindo que um espaço ou ponto não seja aceitável como o segundo caractere), o seguinte pode ser usado com qualquer solução:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

Observe que o caractere único pode ser codificado ou calculado a partir do nome. (Ou use ""para remover o espaço ou o ponto.)


Por fim, se você realmente precisar atender ao caso em que o nome completo seja apenas um caractere (!), Basta agrupar a fórmula de nome único com outra IFERROR() . (Supondo, é claro, que a fórmula alternativa não cuide desse caso especial.)


Adenda 3:

Finalmente, finalmente (não, realmente * ;-)) para atender a vários espaços consecutivos e / ou à esquerda / à direita, use em TRIM(A1)vez de A1.


* Vou deixar o caso de um único sobrenome de letra, como o Sr. T, como um exercício para o leitor.

Dica: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")

robinCTS
fonte
11
Como sempre, suas respostas parecem ser de um guia avançado do Excel! Essa seria a resposta mais votada se você a tivesse postado antes!
PeterH
@ PeterH Obrigado pelo complemento. Eu só tropeçou em toda a questão, uma vez que atingiu a lista de Perguntas de Rede Hot, então eu estava um pouco atrasado para a festa ;-)
robinCTS
2

Com base nesta resposta , aqui está uma solução elegante que funciona com qualquer número de nomes do meio:

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

Explicação:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))substitui o (s) espaço (s) entre palavras por espaços iguais em número ao comprimento da cadeia inteira. O uso do comprimento da string em vez de um número arbitrariamente grande garante que a fórmula funcione para qualquer string de comprimento e significa que funciona de maneira eficiente.

RIGHT(space_expanded_string, LEN(A1))extrai a palavra mais à direita precedida por vários espaços. *

TRIM(space_prepended_rightmost_word) extrai a palavra mais à direita.

LEFT(rightmost_word, 2) extrai os dois primeiros caracteres da palavra mais à direita (sobrenome).


* Advertência: Se é possível que um nome de usuário contenha espaços à direita, você precisa substituir o primeiro argumento de SUBSTITUTE(), por exemplo A1, por TRIM(A1). Os espaços à esquerda e vários espaços consecutivos entre as palavras são tratados corretamente apenas com A1.


Corrigindo sua tentativa

Examinando com mais atenção sua tentativa de solução, parece que você estava muito perto de uma fórmula funcional para concatenar as duas primeiras letras da primeira palavra (ou seja, o primeiro nome) e as duas primeiras letras da segunda palavra, se ela existisse.

Observe que, se um nome de usuário contiver nomes do meio, a fórmula corrigida pegará incorretamente as duas primeiras letras do primeiro nome do meio em vez do sobrenome (assumindo que sua intenção é realmente extraí-las do sobrenome).

Além disso, se todos os nomes de usuário consistirem apenas em um primeiro nome, ou um primeiro nome e um sobrenome, a fórmula será desnecessariamente complicada e poderá ser simplificada.


Para ver como a fórmula funciona e assim corrigi-la, é mais fácil se for prettificada, assim:

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  IFERROR(
    FIND(" ", SUBSTITUTE(A1," ","",1)),
    LEN(A1)
  )
  - IFERROR(FIND(" ",A1), LEN(A1))
)


Para entender como funciona, primeiro observe o que acontece quando A1não contém espaços (ou seja, contém apenas um único nome). Todas as IFERROR()funções são avaliadas para seus segundos argumentos, pois FIND()retornam um #VALUE!erro se a cadeia de pesquisa não for encontrada na cadeia de destino:

=
LEFT(A1,2) &
MID(
  A1,
  LEN(A1) + 1,
  LEN(A1)
  -LEN(A1)
)

O terceiro argumento de MID()avalia para zero, então a função gera ""e o resultado da fórmula são os dois primeiros caracteres do nome único.


Agora observe quando existem exatamente dois nomes (ou seja, existe exatamente um espaço). A primeira e a terceira IFERROR()funções avaliam seus primeiros argumentos, mas a segunda avalia seu segundo argumento, pois FIND(" ", SUBSTITUTE(A1," ","",1))está tentando encontrar outro espaço após remover o primeiro e único:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  LEN(A1)
  - FIND(" ",A1)
)

Claramente, MID()retorna a segunda palavra (ou seja, o sobrenome) em sua totalidade, e o resultado da fórmula são os dois primeiros caracteres do primeiro nome, seguidos por todos os caracteres do sobrenome.


Por uma questão de integridade, também veremos o caso em que há pelo menos três nomes, embora deva ser bastante óbvio agora como corrigir a fórmula. Desta vez, todas as IFERROR()funções avaliam seus primeiros argumentos:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  FIND(" ", SUBSTITUTE(A1," ","",1))
  - FIND(" ",A1)
)

É um pouco menos claro do que era no caso anterior, mas MID()retorna exatamente a segunda palavra inteira (ou seja, o primeiro nome do meio). Assim, o resultado da fórmula são os dois primeiros caracteres do primeiro nome, seguidos por todos os caracteres do primeiro nome do meio.


Obviamente, a correção é usar LEFT()para obter os dois primeiros caracteres da MID()saída:

=
LEFT(A1,2) &
LEFT(
  MID(
    A1,
    IFERROR(FIND(" ",A1), LEN(A1)) + 1,
    IFERROR(
      FIND(" ", SUBSTITUTE(A1," ","",1)),
      LEN(A1)
    )
    - IFERROR(FIND(" ",A1), LEN(A1))
  ),
  2
)


A simplificação que mencionei acima é substituir LEFT(MID(…,…,…), 2)por MID(…,…,2):

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  2
)

ou em uma linha:

=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)

Essa é essencialmente a solução de PeterH modificada para também trabalhar com nomes únicos (nesse caso, o resultado são apenas os dois primeiros caracteres do nome).


Nota: As fórmulas pré-determinadas realmente funcionam se inseridas.

robinCTS
fonte