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 A1
nã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.