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á JoDoe
como resultado.
Respostas:
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:
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:
fonte
FIND()
vez deSEARCH()
;-)) 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)
assuming each person only has a First and Last name
TRIM(LEFT(A1,2))
que o primeiro nome tenha apenas uma letra, mas talvez seja fácil verificar manualmente esses casos especiais.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.
Obrigado a @Kyle pela parte principal da fórmula
fonte
~
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.Esta é outra maneira ...
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
fonte
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
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 deSEARCH()
- digitar dois caracteres a menos ajuda a evitar o RSI ;-))Uma resposta alternativa que nem os usos
MID()
,LEFT()
nemRIGHT()
, mas em vez disso usaREPLACE()
para remover as partes indesejadas do nome é a seguinte: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:
substituindo
FIND(" ",A1)
porIFERROR(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:
Nesse caso,
FIND(" ",A1)
é substituído porFIND("§", 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 usoCHAR(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:
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 deA1
.* Vou deixar o caso de um único sobrenome de letra, como o Sr. T, como um exercício para o leitor.
fonte
Com base nesta resposta , aqui está uma solução elegante que funciona com qualquer número de nomes do meio:
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 exemploA1
, porTRIM(A1)
. Os espaços à esquerda e vários espaços consecutivos entre as palavras são tratados corretamente apenas comA1
.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:
Para entender como funciona, primeiro observe o que acontece quando
A1
não contém espaços (ou seja, contém apenas um único nome). Todas asIFERROR()
funções são avaliadas para seus segundos argumentos, poisFIND()
retornam um#VALUE!
erro se a cadeia de pesquisa não for encontrada na cadeia de destino: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, poisFIND(" ", SUBSTITUTE(A1," ","",1))
está tentando encontrar outro espaço após remover o primeiro e único: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:É 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 daMID()
saída:A simplificação que mencionei acima é substituir
LEFT(MID(…,…,…), 2)
porMID(…,…,2)
:ou em uma linha:
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.
fonte