Sur la base de cette réponse , voici une solution élégante qui fonctionne avec n'importe quel nombre de prénoms:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Explication:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
remplace le ou les espaces entre les mots par des espaces dont le nombre est égal à la longueur de la chaîne entière. L'utilisation de la longueur de chaîne plutôt que d'un nombre arbitrairement élevé garantit que la formule fonctionne pour n'importe quelle chaîne de longueur et signifie qu'elle le fait efficacement.
RIGHT(space_expanded_string, LEN(A1))
extrait le mot le plus à droite précédé d'un tas d'espaces. *
TRIM(space_prepended_rightmost_word)
extrait le mot le plus à droite.
LEFT(rightmost_word, 2)
extrait les deux premiers caractères du mot le plus à droite (nom de famille).
* Avertissement: s'il est possible qu'un nom d'utilisateur contienne des espaces de fin, vous devez remplacer le premier argument de SUBSTITUTE()
, c'est A1
-à- dire par TRIM(A1)
. Les espaces de tête et plusieurs espaces consécutifs entre les mots sont traités correctement avec A1
.
Réparer votre tentative
En examinant de plus près votre tentative de solution, il semble que vous étiez très proche d'une formule de travail pour concaténer les deux premières lettres du premier mot (c'est-à-dire le prénom) et les deux premières lettres du deuxième mot s'il existait.
Notez que si un nom d'utilisateur devait contenir des prénoms, la formule corrigée prendrait incorrectement les deux premières lettres du premier prénom au lieu du nom de famille (en supposant que votre intention est en effet de les extraire du nom de famille).
De plus, si tous les noms d'utilisateur ne sont constitués que d'un prénom ou d'un prénom et d'un nom, la formule est inutilement compliquée et peut être simplifiée.
Pour voir comment fonctionne la formule et ainsi la corriger, il est plus facile si elle est raffinée, comme ceci:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Pour comprendre comment cela fonctionne, regardez d'abord ce qui se passe quand A1
ne contient aucun espace (c'est-à-dire qu'il ne contient qu'un seul nom). Toutes les IFERROR()
fonctions évaluent leur deuxième argument car FIND()
retourne une #VALUE!
erreur si la chaîne de recherche n'est pas trouvée dans la chaîne cible:
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Le troisième argument de est MID()
évalué à zéro, la sortie de la fonction ""
et le résultat de la formule sont donc les deux premiers caractères du nom unique.
Regardez maintenant quand il y a exactement deux noms (c'est-à-dire qu'il y a exactement un espace). Les première et troisième IFERROR()
fonctions évaluent leurs premiers arguments mais la seconde évalue leur deuxième argument car FIND(" ", SUBSTITUTE(A1," ","",1))
tente de trouver un autre espace après avoir supprimé le premier, et seulement un:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Clairement, MID()
renvoie le deuxième mot (c'est-à-dire le nom de famille) dans son intégralité, et le résultat de la formule est les deux premiers caractères du prénom suivi de tous les caractères du nom de famille.
Par souci d'exhaustivité, nous examinerons également le cas où il y a au moins trois noms, bien qu'il devrait être assez évident maintenant de corriger la formule. Cette fois, toutes les IFERROR()
fonctions évaluent leurs premiers arguments:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
Il est légèrement moins clair qu'il ne l'était dans le cas précédent, mais MID()
renvoie exactement le deuxième mot entier (c'est-à-dire le premier prénom). Ainsi, le résultat de la formule est les deux premiers caractères du prénom suivi de tous les caractères du premier deuxième prénom.
De toute évidence, le correctif est d'utiliser LEFT()
pour obtenir les deux premiers caractères de la MID()
sortie:
=
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
)
La simplification que j'ai mentionnée ci-dessus est à remplacer LEFT(MID(…,…,…), 2)
par MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
ou sur une seule ligne:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
Il s'agit essentiellement de la solution de PeterH modifiée pour fonctionner également avec des noms uniques (auquel cas, le résultat n'est que les deux premiers caractères du nom).
Remarque: Les formules prettifiées fonctionnent réellement si elles sont entrées.