J'ai des noms dans une colonne. Je dois séparer uniquement les noms de famille de cette colonne dans une autre colonne.
Le nom de famille est délimité par un espace à droite.
Le contenu de la cellule A2 = Alistair Stevens
et j'ai entré la formule dans la cellule B2
(j'ai besoin de 'Stevens'
dans la cellule B2
)
J'ai essayé d'utiliser les formules suivantes:
=RIGHT(A2,FIND(" ",A2,1)-1)
=RIGHT(A2,FIND(" ",A2))
Ces deux formules fonctionnent pour cette cellule, mais lorsque je la remplis/la copie et la colle pour les cellules situées en dessous, elle ne fonctionne pas. Je me trompe de valeurs !!
A3 -> David Mckenzie
B3 -> Mckenzie
Cela fonctionne même s'il y a des prénoms:
=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2," ",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,LEN(A2))
Si vous voulez tout, MAIS le nom de famille, consultez cette réponse .
Si vos noms contiennent des espaces, ils peuvent être supprimés en remplaçant toutes les instances de A2
par TRIM(A2)
dans la formule ci-dessus.
Notez que ce n’est que par pure chance que votre première formule =RIGHT(A2,FIND(" ",A2,1)-1)
fonctionne pour Alistair Stevens
. Cela est dû au fait que "Alistair"
et " Stevens"
contiennent le même nombre de caractères (si vous comptez l'espace au début dans " Stevens"
).
Si vous souhaitez obtenir l'avant-dernier mot dans un texte, vous pouvez utiliser cette macro en tant que fonction dans votre feuille de calcul:
Public Function Get2ndText(S As String) As String
Dim sArr() As String
Dim i As Integer
sArr = Split(S, " ")
'get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)
End Function
Ensuite, dans votre feuille de calcul B1, en tant que texte:
CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126
en B2 votre formule serait:
=Get2ndText(B1)
Le résultat serait
TX
Essayez cette fonction dans Excel:
Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String
Dim s() As String = Split(Text, SplitAt)
If ReturnZeroBasedIndex <= s.Count - 1 Then
Return s(ReturnZeroBasedIndex)
Else
Return ""
End If
End Function
Vous l'utilisez comme ceci:
Prénom (A1) | Nom de famille (A2)
Valeur dans la cellule A1 = Michael Zomparelli
Je veux le nom de famille dans la colonne A2.
=SPLITTEXT(A1, " ", 1)
Le dernier paramètre est l'index de base zéro que vous voulez renvoyer. Donc, si vous vous séparez du caractère espace, index 0 = Michael et index 1 = Zomparelli
La fonction ci-dessus est une fonction .Net, mais peut facilement être convertie en VBA.
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))
Essaye ça. Esperons que ça marche.
Plus simple serait: =TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," ",REPT(" ",99)),99))
Vous pouvez utiliser A2
à la place de TRIM(A2)
si vous êtes certain que vos données ne contiennent aucun espace indésirable.
Sur la base du concept expliqué par Rick Rothstein: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String
Désolé d'être nécroposteur!