2
votes

Excel récupère la sous-chaîne de la nième position à la fin de la chaîne

Alors, comment obtenir une sous-chaîne de la nième position à la fin de la chaîne?

Saisie à la cellule A1 Nom: Thomas B.

Résultat attendu: Thomas B.

Je connais un moyen de le faire mais je me demande s'il existe d'autres moyens élégants qu'eux? (une sorte de = RIGHT (A1, -6) ....)

  1. = MID (A1, 6, 999999) // 999999 ne semble pas si bon

  2. = MID (A1, 6, LEN (A1) - 5) // doit calculer 2 fois, d'abord obtenir len, puis obtenir la sous-chaîne, semble trop fonctionner?


4 commentaires

Vous n'avez pas besoin de soustraire 5 dans le deuxième exemple. Cependant, je doute fort que la micro-optimisation des performances soit un problème dont vous devez vous soucier.


Vos formules MID semblent contredire votre titre. Voulez-vous obtenir la sous-chaîne du n ème caractère du début ou de la fin d'une chaîne?


@Jerry nième depuis le début de la chaîne, récupère tous les caractères jusqu'à la fin de la chaîne. Je vais essayer de modifier ce titre


@ KenY-N Aujourd'hui, je suis juste confronté à ce problème, d'abord je pense que = RIGHT (A1, -6) est ok, mais cela ne fonctionnera pas donc je recherche et depuis MID fonction J'écris ces 2 formules ci-dessus. Je me demande s'il existe d'autres façons élégantes d'aller. Si je n'en trouve pas, j'utiliserai le `= MID (A1, 6, LEN (A1)). Je vous remercie.


4 Réponses :


4
votes

Eh bien, vos deux méthodes fonctionnent déjà, mais vous pouvez également utiliser celle-ci:

=TRIM(MID(A1,FIND(":",A1)+1,100))

(vous avez presque eu celle-ci dans votre propre question)

ou celui-ci:

=RIGHT(A1,LEN(A1)-6)

(la fonction FIND () renvoie la position numérique d'une chaîne de recherche, elle est donc idéale pour faire des sous-chaînes dynamiques)


1 commentaires

Merci d'avoir suggéré la fonction FIND () avec dynamique pour Nom: , Nom: , nom: , < code> Nom complet: ....



1
votes

Pourquoi ne remplacez-vous pas simplement les six premiers caractères par une chaîne vide?

=SUBSTITUTE(A1;LEFT(A1;6);"";1)


3 commentaires

C'est un bon moyen si amélioré à = SUBSTITUTE (A1, LEFT (A1; 6), "", 1) ou = SUBSTITUTE (A1, "Name:", "", 1 ) dans le cas où 6 premiers caractères sont fixés


Qu'en est-il asdfghJKLasdfgh? Cela rendra JKL.


@ z32a7ul: vous avez raison. J'ai édité ma réponse comme mentionné par Pham (ajouté le "1" à la fin).



1
votes

Une autre possibilité est que vous créez une constante avec la valeur 2 ^ 31-1 (= 2147483647), qui est la valeur entière maximale signée sur les systèmes 32 bits, et vous lui donnez un joli nom, comme MaxInt, puis votre La première formule sera également efficace et jolie:

=MID(A1, 6, MaxInt)

Vous pouvez ajouter le nom avec Ctrl + F3. Si vous êtes intéressé par les calculs rapides, le donner comme 2147483647 plutôt que 2 ^ 31-1 peut avoir un (très petit) avantage.


0 commentaires

3
votes

REMPLACER

Comme Dominique l'a déjà écrit: "Pourquoi ne remplacez-vous pas simplement les six premiers caractères par une chaîne vide?"

=SUBSTITUTE(A1,LEFT(A1,6),"",1)

=REPLACE(A1,1,6,"")

J'ai fait une mesure du temps, mais la différence est inférieure à une seconde à 50000 enregistrements (pour LEFT , MID , REPLACE & SUSTITUTE ). Donc j'ai peur que ELEGANCE soit tout ce que vous allez obtenir.

Une petite étude

J'ai créé cette étude parce que lorsque vous dites à partir du n-ième caractère, votre n -ième caractère est 7 (vos MID -s sont faux), mais vous voulez supprimer les premiers n-1 ( 6 ) caractères. Ainsi, selon la façon dont vous formulez votre question, vous pourriez avoir une approche différente dans RIGHT ou MID , et vous vous souviendrez de REPLACE et SUBSTITUTE ou vous ne pouvez pas.

 entrez la description de l'image ici

Formules de petite étude pour A1 (*) et B1 (#,?, *)

Obtenir la chaîne du N-ième caractère à la fin, par exemple 7

=RIGHT(A1,LEN(A1)-(FIND(B1,A1)+LEN(B1))+1)
=RIGHT(A1,LEN(A1)-FIND(B1,A1)-LEN(B1)+1)
=RIGHT(A1,LEN(A1)-FIND(": ",A1)-LEN(": ")+1)
=MID(A1,FIND(B1,A1)+LEN(B1),LEN(A1)-(FIND(B1,A1)+LEN(B1))+1)
=MID(A1,FIND(B1,A1)+LEN(B1),LEN(A1)-FIND(B1,A1)-LEN(B1)+1)
=MID(A1,FIND(B1,A1)+LEN(B1),LEN(A1))
=MID(A1,FIND(": ",A1)+LEN(": "),LEN(A1)-FIND(": ",A1)-LEN(": ")+1)
=MID(A1,FIND(": ",A1)+LEN(": "),LEN(A1))
=RIGHT(A1,LEN(A1)-(FIND(B1,A1)))
=RIGHT(A1,LEN(A1)-(FIND(" ",A1)))
=MID(A1,FIND(B1,A1)+1,LEN(A1)-FIND(B1,A1))
=MID(A1,FIND(B1,A1)+1,LEN(A1))
=MID(A1,FIND(" ",A1)+1,LEN(A1)-FIND(" ",A1))
=MID(A1,FIND(" ",A1)+1,LEN(A1))
=RIGHT(A1,LEN(A1)-B1)
=RIGHT(A1,LEN(A1)-6)
=MID(A1,B1+1,LEN(A1)-B1)
=MID(A1,B1+1,LEN(A1))
=MID(A1,7,LEN(A1)-6)
=MID(A1,7,LEN(A1))
=MID(A1,7,LEN(A1))

Supprimer les N premiers caractères d'une chaîne, par exemple 6

=MID(A1,B1,LEN(A1)-(B1-1))
=MID(A1,B1,LEN(A1)-B1+1)
=MID(A1,B1,LEN(A1))
=MID(A1,7,LEN(A1)-6)

Obtenir une chaîne après un caractère, par exemple ""

=RIGHT(A1,LEN(A1)-6)

Obtenir une chaîne après une chaîne, par exemple ":"

=RIGHT(A1,LEN(A1)-(B1-1))
=RIGHT(A1,LEN(A1)-B1+1)

Retour à Supprimer N premiers caractères d'une chaîne, par exemple 6

=REPLACE(A1,1,6,"")

1 commentaires

Je vous remercie. J'ai été confronté à ce problème hier et j'ai du mal à le décrire clairement dans ma question. Comme je ne suis pas habitué à exceller les formules, je finis par trouver les moyens ci-dessus pour le faire. Pour votre "petite étude", l'OMI, ils pourraient tous s'appliquer à mon problème. Et pour mon cas particulier, je pense que = REPLACE (A1,1,6, "") devrait être le plus élégant