188 votes

Comment puis-je effectuer une recherche de chaîne inverse dans Excel sans utiliser VBA ?

J’ai une feuille de calcul Excel contenant une liste de chaînes. Chaque chaîne est composée de plusieurs mots, mais le nombre de mots dans chaque chaîne est différent.

À l’aide de construit en fonctions Excel (pas de VBA), y a-t-il un moyen d’isoler le dernier mot de chaque chaîne ?

Exemples :

 Vous relèvent que l’homme ? -> homme ? Négatif, je suis une viande popsicle-> popsicle Aziz ! Lumière ! -> Lumière !

231voto

BradC Points 18833

Celui-ci est testé et fonctionne (basé sur Brad post original):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
     LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

Si vos chaînes d'origine peut contenir un pipe "|" le caractère, puis de remplacer à la fois dans le ci-dessus avec quelques autres caractères qui ne s'affichent pas dans votre source. (Je soupçonne que Brad original a été rompue en raison d'un caractère non imprimable a été supprimé dans la traduction).

Bonus: Comment ça marche (de droite à gauche):

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) – Nombre d'espaces dans la chaîne d'origine
SUBSTITUTE(A1," ","|", ... ) – Remplace juste la finale de l'espace avec un |
FIND("|", ... ) – Trouve la position absolue de l'remplacé | (c'était la dernière de l'espace)
Right(A1,LEN(A1) - ... )) – Renvoie tous les caractères après que l' |

EDIT: pour tenir compte du cas où le texte source ne contient pas d'espaces, ajoutez les lignes suivantes au début de la formule:

=IF(ISERROR(FIND(" ",A1)),A1, ... )

rendre l'ensemble de la formule maintenant:

=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
    SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))

Ou vous pouvez utiliser l' =IF(COUNTIF(A1,"* *") de la syntaxe de l'autre version.

Lorsque la chaîne d'origine peut contenir un espace à la dernière position, ajouter une garniture de fonctions, tout en comptant tous les espaces: Faire de la fonction suivantes:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))

93voto

Jerry Beaucaire Points 1637

Il s’agit de la technique que j’ai utilisé avec succès :

Pour obtenir le premier mot d’une chaîne, il suffit de changer de droite à gauche

En outre, remplacer A1 par la cellule tenant le texte.

28voto

Joe Finkle Points 21

Une version plus robuste de la réponse de Jerry :

Qui fonctionne indépendamment de la longueur de la chaîne, menant ou espaces, ou tout autre chose et c’est toujours assez court et simple.

13voto

Jon Points 6911

J’ai trouvé ce sur google, testé dans Excel 2003 et ça marche pour moi :

[modifier] Je n’ai pas assez rep à commenter, cela semble le meilleur endroit... Réponse de BradC aussi ne fonctionne pas avec les espaces ou les cellules vides...
[2e édition] en fait, il ne fonctionne pas pour seul mots soit...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X