Existe-t-il un moyen efficace d'identifier le dernier caractère/chaîne correspondant dans une chaîne de caractères en utilisant les fonctions de base ? C'est-à-dire pas le dernier caractère ou la dernière chaîne de caractères. de la chaîne, mais la position de la dernière occurrence d'un caractère/chaîne sur une chaîne de caractères. Search
et find
Les deux fonctionnent de gauche à droite et je ne vois pas comment les appliquer sans un long algorithme récursif. Et cette solution semble désormais obsolète.
Réponses
Trop de publicités?Vous pouvez utiliser cette fonction que j'ai créée pour trouver la dernière instance d'une chaîne dans une chaîne.
Bien sûr, la formule Excel classique fonctionne, mais elle est beaucoup trop difficile à lire et à utiliser. À un moment donné, il faut se diviser en petits morceaux pour pouvoir les maintenir. Ma fonction ci-dessous est lisible, mais cela n'a pas d'importance car vous l'appelez dans une formule en utilisant des paramètres nommés. Cela simplifie son utilisation.
Public Function FindLastCharOccurence(fromText As String, searchChar As String) As Integer
Dim lastOccur As Integer
lastOccur = -1
Dim i As Integer
i = 0
For i = Len(fromText) To 1 Step -1
If Mid(fromText, i, 1) = searchChar Then
lastOccur = i
Exit For
End If
Next i
FindLastCharOccurence = lastOccur
End Function
Je l'utilise comme ça :
=RIGHT(A2, LEN(A2) - FindLastCharOccurence(A2, "\"))
Considérant une partie d'un commentaire fait par @SSilk mon objectif final a vraiment été d'obtenir tout à droite de cette dernière occurrence une approche alternative avec une formule très simple consiste à copier une colonne (disons A
) de chaînes de caractères et sur la copie (disons ColonneB) appliquer la fonction Rechercher et Remplacer. Par exemple, en prenant l'exemple : Drive:\Folder\SubFolder\Filename.ext
Cela renvoie ce qui reste (ici Filename.ext
) après la dernière instance de n'importe quel caractère choisi (ici \
) qui est parfois l'objectif de toute façon et facilite la recherche de la position du dernier caractère de ce type avec une formule courte telle que :
=FIND(B1,A1)-1
J'arrive un peu tard dans la soirée, mais cela pourrait peut-être vous aider. Le lien dans la question avait une formule similaire, mais la mienne utilise l'instruction IF() pour se débarrasser des erreurs.
Si vous n'avez pas peur de Ctrl+Shift+Enter, vous pouvez vous débrouiller assez bien avec une formule de tableau.
Chaîne de caractères (dans la cellule A1) : "un.deux.trois.quatre"
Formule :
{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))} use Ctrl+Shift+Enter
Résultat : 14
D'abord,
ROW($1:$99)
renvoie un tableau d'entiers de 1 à 99 : {1,2,3,4,...,98,99}
.
Suivant,
MID(A1,ROW($1:$99),1)
renvoie un tableau de chaînes de longueur 1 trouvées dans la chaîne cible, puis renvoie des chaînes vides lorsque la longueur de la chaîne cible est atteinte : {"o","n","e",".",..."u","r","","",""...}
Suivant,
IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))
compare chaque élément du tableau à la chaîne "." et renvoie soit l'indice du caractère dans la chaîne, soit FAUX : {FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Dernière,
=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))
renvoie la valeur maximale du tableau : 14
L'avantage de cette formule est qu'elle est courte, relativement facile à comprendre et qu'elle ne nécessite pas de caractères uniques.
Les inconvénients sont l'utilisation obligatoire de Ctrl+Shift+Enter et la limitation de la longueur des chaînes. Ceci peut être contourné avec une variation montrée ci-dessous, mais cette variation utilise la fonction OFFSET() qui est une fonction volatile (lire : lente).
Je ne suis pas sûr de la rapidité de cette formule par rapport aux autres.
Variations :
=MAX((MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)=".")*ROW(OFFSET($A$1,,,LEN(A1)))) works the same way, but you don't have to worry about the length of the string
=SMALL(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd occurrence of the match
=LARGE(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd-to-last occurrence of the match
=MAX(IF(MID(I16,ROW($1:$99),2)=".t",ROW($1:$99))) matches a 2-character string **Make sure you change the last argument of the MID() function to the number of characters in the string you wish to match!
Dans les versions plus récentes d'Excel (2013 et plus), le remplissage flash peut être une solution simple et rapide : Utilisation de Flash Fill dans Excel .
3 votes
Parce que je veux la position de la dernière instance du point "." dans la chaîne "un.deux.trois.quatre".
6 votes
Il est amusant de constater qu'une lecture erronée de la question permet d'obtenir des votes positifs.
1 votes
Je dirais qu'il faut voir les choses sous un autre angle : cela signifie que d'autres personnes n'ont pas compris ce que vous vouliez dire dans votre question et ont donc pensé que la suggestion était la bonne solution... Même la réponse que vous avez choisie commençait par "Je pense que je comprends ce que vous voulez dire"... Ce n'est pas une critique, mais plutôt une demande d'essayer de rendre vos questions plus faciles à comprendre pour aider les gens à répondre plus facilement.
0 votes
J'aurais dû ajouter l'exemple à la question, mais je pense qu'il y avait suffisamment d'éléments pour distinguer cette question d'une requête sur le dernier caractère d'une chaîne de caractères :
search
etfind
les deux chaînes de requête contenu Le terme "match" est un terme standard, et l'exemple est lié.0 votes
Duplicata possible de Comment extraire la dernière sous-chaîne d'une colonne Excel ?
0 votes
(Légèrement plus récent) duplicate cross-site : superuser.com/q/680769