Existe-t-il un moyen efficace d'identifier la dernière correspondance de caractère / chaîne dans une chaîne à l'aide des fonctions de base? Ce n'est pas le dernier caractère / chaîne de la chaîne, mais la position de la dernière occurrence d'un caractère / chaîne dans une chaîne. Search
et les find
deux fonctionnent de gauche à droite, donc je ne peux pas penser comment appliquer sans un long algorithme récursif. Et cette solution semble désormais obsolète.
excel-formula
géothéorie
la source
la source
search
etfind
le contenu de la chaîne de requête , `` match '' est un terme standard, plus l'exemple lié.Réponses:
Avec les nouvelles versions d'Excel viennent de nouvelles fonctions et donc de nouvelles méthodes. Bien qu'il soit réplicable dans les anciennes versions (mais je ne l'ai pas vu auparavant), quand on a Excel O365, on peut utiliser:
Cela peut également être utilisé pour récupérer la dernière position des sous-chaînes (qui se chevauchent):
Bien que cela nous permette à la fois de ne plus utiliser de caractère de remplacement arbitraire et de permettre des motifs qui se chevauchent, le «inconvénient» est l'utilisation d'un tableau.
Remarque: vous pouvez forcer le même comportement dans les anciennes versions d'Excel via
Saisie via CtrlShiftEnterou en utilisant une ligne
INDEX
pour se débarrasser de l'intersection implicite:la source
Je pense que je comprends ce que tu veux dire. Supposons par exemple que vous vouliez le \ le plus à droite dans la chaîne suivante (qui est stockée dans la cellule A1):
Lecteur: \ Folder \ SubFolder \ Filename.ext
Pour obtenir la position du dernier \, vous utiliseriez cette formule:
Cela nous indique que \ est le plus à droite au caractère 24. Pour ce faire, il recherche "@" et remplace le tout dernier "\" par un "@". Il détermine le dernier en utilisant
Dans ce scénario, la sous-chaîne est simplement "\" qui a une longueur de 1, vous pouvez donc laisser la division à la fin et utiliser simplement:
Nous pouvons maintenant l'utiliser pour obtenir le chemin du dossier:
Voici le chemin du dossier sans le \
Et pour obtenir uniquement le nom du fichier:
Cependant, voici une version alternative de tout ce qui est à droite de la dernière instance d'un personnage spécifique. Donc, en utilisant notre même exemple, cela renverrait également le nom du fichier:
la source
SUBSTITUTE
toutes les (3) instances de\
avec rien (raccourcir la longueur de la chaîne par 3) -> que\
(le 3ème) est le dernier; remplacez cela par quelque chose d'unique etFIND
la position de ce personnage unique ... génial ... merci!=ISNUMBER(SEARCH("@",A1))
, comme proposé par @ gwin003 .99
? Supposez-vous simplement que la longueur de ces différentes chaînes est inférieure à 99? Voir cette réponse et cette réponse qui ne font pas une telle hypothèse.Que diriez-vous de créer une fonction personnalisée et de l'utiliser dans votre formule? VBA a une fonction intégrée,
InStrRev
, qui fait exactement ce que vous recherchez.Mettez ceci dans un nouveau module:
Et votre fonction ressemblera à ceci (en supposant que la chaîne d'origine est en B1):
la source
tigeravatar et Jean-François Corbett ont suggéré d'utiliser cette formule pour générer la chaîne à droite de la dernière occurrence du caractère "\"
Si le caractère utilisé comme séparateur est un espace, "", alors la formule doit être remplacée par:
Inutile de le mentionner, le caractère "{" peut être remplacé par n'importe quel caractère qui n'apparaîtrait pas "normalement" dans le texte à traiter.
la source
Je viens de proposer cette solution, aucun VBA n'est nécessaire;
Trouvez la dernière occurrence de "_" dans mon exemple;
Expliqué à l'envers;
J'espère que cela a été utile.
la source
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 acceptée fonctionne, mais elle est beaucoup trop difficile à lire et à utiliser. À un moment donné, vous devez vous séparer en petits morceaux pour qu'il soit maintenable. Ma fonction ci-dessous est lisible, mais ce n'est pas pertinent car vous l'appelez dans une formule en utilisant des paramètres nommés. Cela rend son utilisation simple.
Je l'utilise comme ça:
la source
Considérant une partie d'un commentaire fait par @SSilk, mon objectif final a vraiment été de tout mettre à droite de cette dernière occurrence, une approche alternative avec une formule très simple consiste à copier une colonne (disons
A
) de chaînes et sur la copie (disons ColonneB) applique 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 du caractère choisi (ici\
), ce 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:la source
Je suis un peu en retard à la fête, mais peut-être que cela pourrait 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 + Maj + Entrée, vous pouvez très bien faire avec une formule matricielle.
Chaîne (dans la cellule A1): "one.two.three.four"
Formule:
Résultat: 14
Première,
renvoie un tableau d'entiers de 1 à 99:
{1,2,3,4,...,98,99}
.Prochain,
renvoie un tableau de chaînes de 1 longueur trouvées dans la chaîne cible, puis renvoie des chaînes vides une fois que la longueur de la chaîne cible est atteinte:
{"o","n","e",".",..."u","r","","",""...}
Prochain,
compare chaque élément du tableau à la chaîne "." et renvoie soit l'index du caractère dans la chaîne, soit FALSE:
{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Dernier,
renvoie la valeur maximale du tableau:
14
Les avantages de cette formule sont qu'elle est courte, relativement facile à comprendre et ne nécessite aucun caractère unique.
Les inconvénients sont l'utilisation requise de Ctrl + Maj + Entrée et la limitation de la longueur de la chaîne. Cela peut être contourné avec une variation illustrée ci-dessous, mais cette variation utilise la fonction OFFSET () qui est une fonction volatile (lecture: lente).
Je ne sais pas quelle est la vitesse de cette formule par rapport aux autres.
Variations:
la source
Dans les versions plus récentes d'Excel (2013 et versions ultérieures), le remplissage flash peut être une solution simple et rapide, voir: Utilisation du remplissage Flash dans Excel .
la source
Un moyen simple de le faire dans VBA est:
la source
Très tard à la fête, mais une solution simple consiste à utiliser VBA pour créer une fonction personnalisée.
Ajouter la fonction à VBA dans le classeur, la feuille de calcul ou un module VBA
Puis la formule cellulaire
dans une cellule et la chaîne à rechercher dans la cellule B1 remplira la cellule avec le texte à la fin du dernier "/" de la cellule B1. Aucune limite de longueur, aucune formule obscure. Le seul inconvénient que je peux penser est la nécessité d'un classeur prenant en charge les macros.
Toute fonction VBA utilisateur peut être appelée de cette manière pour renvoyer une valeur à une formule de cellule, y compris en tant que paramètre d'une fonction Excel intégrée.
Si vous comptez utiliser la fonction de manière intensive, vous voudrez vérifier le cas où le caractère n'est pas dans la chaîne, alors la chaîne est vide, etc.
la source
Cellule
A1 = find/the/position/of/the last slash
un moyen simple de le faire est d'inverser le texte, puis de trouver la première barre oblique normalement. Vous pouvez maintenant obtenir la longueur du texte intégral moins ce nombre.
Ainsi:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
Cela renvoie 21, la position du dernier /
la source
REVERSETEXT
n'est pas une formule Excel standard