web-dev-qa-db-fra.com

Extraire la dernière sous-chaîne d'une cellule

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"). 

46

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
1
Kerry White

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.

0
Michael Z.
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))

Essaye ça. Esperons que ça marche.

0
Wolfgang

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!

0