J'ai besoin de trouver le dernier espace dans une cellule XLS


17

J'ai une feuille Excel avec des valeurs de texte, par exemple dans A1: "Ceci est le texte". J'ai besoin de trouver la position du dernier caractère d'espace. Existe-t-il une formule Excel qui me donnera le résultat que je veux? J'ai essayé FIND et SEARCH, mais ceux-ci commencent par la gauche, ce dont j'ai besoin est de commencer par la droite.


Duplicata intersites d'environ le même millésime: stackoverflow.com/q/18617349
Mathieu K.

Réponses:


28

Si par valeur vide vous voulez dire "espace", et par XLS vous voulez dire Excel, alors vous pouvez utiliser cette formule (en supposant que le test dans lequel vous voulez trouver le dernier espace se trouve A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Vous pouvez le diviser en 3 parties:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))vous donne le nombre d'espaces, appelons-le x,
  • SUBSTITUTE(A1," ","☃",[x])remplacera le xe espace (donc le dernier) par un bonhomme de neige,
  • FIND("☃",[...])vous donnera la position du bonhomme de neige. Quelle est la position du dernier espace.

Fonctionne parfaitement. Merci. Il m'a fallu un certain temps pour comprendre pourquoi cela a fonctionné malgré votre explication :)
Dheer

5
+1 pour une réponse agréable et détaillée, et le personnage de remplacement le plus créatif à ce jour.
Doug Glancy

Fonctionne également dans LibreOffice Calc et Google Sheets.
Mathieu K.

8

Voici une autre façon, tous les personnages sont autorisés en A1 (même les bonhommes de neige!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND a un troisième argument qui définit la position de début de la recherche, si vous appliquez un tableau de valeurs entières 1 à n (où n est la longueur de A1) à ce paramètre, vous obtenez un tableau avec le dernier nombre étant la position du dernier espace.

LOOKUPextrait ensuite ce nombre en recherchant une valeur supérieure à toute valeur qui pourrait être trouvée dans ce tableau, auquel cas le dernier nombre est trouvé

Dans Excel 2010ou plus tard, vous pouvez également utiliser une AGGREGATEfonction comme celle-ci

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FINDrenvoie le même tableau que précédemment et en utilisant 14 comme 1er argument de AGGREGATEet 1 comme dernier, vous obtenez la plus grande valeur du tableau, tout en ignorant les erreurs [6]


1
fonctionne très bien. Bien que j'aie été développeur il y a [longtemps], je n'arrive toujours pas à comprendre comment et pourquoi INDIRECT fonctionne :)
Dheer

1
En supposant que A1 a 12 caractères, cette partie est "1:"&LEN(A1)évaluée à "1:12" - c'est une chaîne que ROW ne peut pas traiter mais INDIRECT convertit une chaîne en une référence valide que ROW peut gérer afin que ROW (1:12) vous donne ensuite {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
barry houdini

Merci pour clarif. Ça a du sens maintenant. Ce qui signifie que Find lui-même fonctionne implicitement avec le tableau et s'exécute pour chaque valeur comme position de départ ...
Dheer

C'est vrai, FIND renvoie un tableau, par exemple si A1 contient barry larry houdinialors FIND retournera ce tableau {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}et LOOKUP et / ou AGGREGATE en prendra la dernière / plus grande valeur numérique, c'est-à-dire 12
barry houdini

Remarque: cela fonctionne dans LibreOffice Calc. Il ne fonctionne pas dans Google Sheets, mais trouve la première occurrence.
Mathieu K.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.