J'ai une feuille de calcul des noms d'utilisateur.
Le prénom et le nom se trouvent dans la même cellule de colonne A
.
Existe-t-il une formule qui concatène les deux premières lettres du prénom (premier mot) et les deux premières lettres du nom de famille (deuxième mot)?
Par exemple John Doe
, devrait devenir JoDo
.
j'ai essayé
=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))
mais cela me donne JoDoe
comme résultat.
Réponses:
Oui; en supposant que chaque personne n'a qu'un prénom et un nom, et que celui-ci est toujours séparé par un espace, vous pouvez utiliser ce qui suit:
Je ne pouvais baser cette réponse que sur ces hypothèses car c'est tout ce que vous avez fourni.
Ou si vous souhaitez qu'un espace soit toujours inclus:
la source
FIND()
place deSEARCH()
;-)) Puisque vous supposez qu'il y a toujours un séparateur d'espace, votre deuxième formule peut être simplifiée pour=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
assuming each person only has a First and Last name
TRIM(LEFT(A1,2))
juste au cas où leur prénom n'a qu'une seule lettre, mais il peut être assez facile de vérifier manuellement ces cas spéciaux.Et pour compléter les choses, voici une solution qui renverra les deux premiers caractères du prénom et les deux premiers caractères du nom de famille, mais tient également compte des prénoms.
Merci à @Kyle pour l'essentiel de la formule
la source
~
au lieu de quatre. Si vous craignez qu'un Tilda puisse être utilisé dans le cadre d'un nom (!) Ou, plus probablement, accidentellement tapé, utilisez simplement un caractère qui n'apparaît sur aucun clavier. Je préfère utiliser§
.¶
est un autre bon.C'est une autre façon ...
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
la source
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Tout d'abord, je voudrais dire que la réponse de PeterH est la plus simple et la plus facile à comprendre. (Bien que ma préférence soit d'utiliser
FIND()
au lieu deSEARCH()
- taper deux caractères de moins aide à éviter RSI ;-))Une autre réponse que ni utilise
MID()
,LEFT()
niRIGHT()
, mais utiliseREPLACE()
à la place pour supprimer les parties indésirables du nom est la suivante:Explication:
L'intérieur
REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
supprime les caractères du troisième caractère du nom de famille, tandis que l'extérieur supprime les caractères du troisième caractère du prénom jusqu'à et y compris l'espace.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
Addendum 1:
La formule ci-dessus peut également être adaptée pour permettre un seul deuxième prénom:
en remplaçant
FIND(" ",A1)
parIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
.FIND(" ", A1, FIND(" ",A1)+1)
trouve le deuxième espace (en démarrant la recherche de l'espace après le premier espace) ou des erreurs dans le cas contraire. trouve le premier espace s'il n'y a pas de deuxième espace.IFERROR(find_second_space, FIND(" ",A1))
Cette version (de longue haleine) permet un nombre illimité de prénoms:
Dans ce cas,
FIND(" ",A1)
est remplacé parFIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))
.LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
compte le nombre d'espaces. remplace le dernier espace par . trouve le premier qui équivaut à trouver le dernier espace.SUBSTITUTE(A1, " ", "§", count_of_spaces)
§
FIND("§", last_space_replaced_string)
§
(Le
§
pourrait, bien sûr, être remplacé par n'importe quel caractère garanti de ne pas exister dans la chaîne du nom complet. Une alternative plus générale et plus sûre serait d'utiliserCHAR(1)
.)Notez que, bien sûr, la réponse de BruceWayne est la solution la plus simple et la plus facile à comprendre qui permet un nombre illimité de prénoms.Et bien ça l'était. Jusqu'à ce que je poste mon autre réponse , c'est ;-)Addendum 2:
Toutes les solutions peuvent être adaptées pour répondre au cas d'un seul nom (s'il y a une exigence pour un résultat à quatre caractères) en les enveloppant dans une
IFERROR()
fonction comme ceci:=IFERROR(solution, alternate_formula)
Notez que ce qui précède est une formule de cas générale, et il pourrait être possible d'apporter une modification plus efficace à une solution spécifique. Par exemple, si l'exigence dans le cas d'un nom unique est de joindre les deux premières lettres avec les deux dernières lettres, la réponse de PeterH peut être plus efficacement adaptée de cette manière:
Pour permettre la casse d'un prénom d'une seule lettre ou d'une initiale (en supposant qu'un espace ou un point n'est pas acceptable comme deuxième caractère), ce qui suit peut être utilisé avec n'importe quelle solution:
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
Notez que le caractère unique peut être codé en dur ou calculé à partir du nom. (Ou utilisez
""
pour supprimer l'espace ou le point.)Enfin, si vous avez vraiment besoin de prendre en charge le cas où le nom complet est un seul caractère (!), Enveloppez simplement la formule à nom unique avec une autre
IFERROR()
. (En supposant, bien sûr, que la formule alternative ne s'occupe pas de ce cas spécial.)Addendum 3:
Enfin, enfin (non, vraiment * ;-)) pour répondre à plusieurs espaces consécutifs et / ou en tête / en fin, utilisez
TRIM(A1)
plutôtA1
.* Je vais laisser le cas pour une seule lettre nom de famille, comme MT, comme un exercice pour le lecteur.
la source
Sur la base de cette réponse , voici une solution élégante qui fonctionne avec n'importe quel nombre de prénoms:
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'estA1
-à- dire parTRIM(A1)
. Les espaces de tête et plusieurs espaces consécutifs entre les mots sont traités correctement avecA1
.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:
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 lesIFERROR()
fonctions évaluent leur deuxième argument carFIND()
retourne une#VALUE!
erreur si la chaîne de recherche n'est pas trouvée dans la chaîne cible: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 carFIND(" ", SUBSTITUTE(A1," ","",1))
tente de trouver un autre espace après avoir supprimé le premier, et seulement un: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: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 laMID()
sortie:La simplification que j'ai mentionnée ci-dessus est à remplacer
LEFT(MID(…,…,…), 2)
parMID(…,…,2)
:ou sur une seule ligne:
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.
la source