excel recherche d'une chaîne dans un tableau et de la chaîne de retour si vrai
La colonne A contient une variable de texte autour de 1000 entrées, mais le même texte apparaît dans des cellules différentes.
Dans une autre colonne (Colonne G) = un tableau distinct, chaque cellule contient l'un des un certain nombre de chaînes de texte (chacun peut être de 2 à 5 caractères). Autour de 20 en tout.
Je veux rechercher le début de chaque cellule de la colonne A pour chacune des chaînes de texte dans la colonne G et si l'on est présent (dire G3 contenu) je veux G3 du contenu qui doit être indiqué dans la colonne B dans la même ligne que le contenu de la cellule de la colonne A.
La question est compliquée par le texte pour être assorti de contenant à la fois de l'ASC et de la SC et un autre charcater match en cours sur * (bien que je ne peux exclure * si cela donne une plus simple résultat).
Exemples
La colonne A contient
ASC1 HHHH.........
ASC2 IIII.......
ASC2 AAAA.........
SC2 JJJJ....
ESSAI TROU........
TRIALHOLE......
OP1 MMMM ...
ASC1COMPLEX
KAN1
PS BAN
*TTC Jiokl jj
La Colonne G
ASC1
ASC2
*
OP1
PS
SC2
ESSAI
VÉRIFIER
Si la colonne B doit montrer
ASC1
ASC2
ASC2
SC2
ESSAI
ESSAI
OP1
ASC1
0 (ou une autre erreur/omettre valeur)
PS
*
(Comment) cela peut-il être fait? J'ai essayé d'adapter différentes solutions à partir de l'internet et a échoué.
Merci beaucoup
DaveT
Vous devez vous connecter pour publier un commentaire.
En supposant
G2:G20
contient les chaînes de recherche - si vous pouvez en faire la liste dans l'ordre de la longueur (plus court en premier) donc, compte tenu de vos valeurs de l'échantillon de la liste serait de commencer avec*
PS
OP1
SC2
ASC1
ASC2
ESSAI
VÉRIFIER
ensuite utiliser cette formule en B2 copié vers le bas
=LOOKUP(2^15,FIND(G$2:G$20,A2),G$2:G$20)
G2:G20
doivent être remplis ou d'ajuster la plage - La sont sensibles à la casse et #N/A est retournée si aucune correspondance n'est trouvéeSi vous souhaitez autoriser les blancs en G2:G20 utiliser cette version
=LOOKUP(2^15,FIND(G$2:G$20,A2)/(G$2:G$20<>""),G$2:G$20)
=IF(ISERROR(LOOKUP(2^15,FIND($G$1:$G$5,A1),$G$1:$G$5)), "", LOOKUP(2^15,FIND($G$1:$G$5,A1),$G$1:$G$5))
=IFERROR(LOOKUP(2^15,FIND(G$2:G$20,A2),G$2:G$20),"no match")
=LOOKUP(2^15,FIND(G$2:G$9,A2),G$2:G$9)
....ou vous pouvez avoir des blancs dans G2:G20 si vous utilisez cette version=LOOKUP(2^15,FIND(G$2:G$20,A2)/(G$2:G$20<>""),G$2:G$20)
- je vais mettre à jour ma réponse.....Cela fonctionne si vous placez un astérisque à la fin de chaque chaîne dans la Colonne G. L'astérisque est un caractère générique qui permet à la fonction MATCH() pour faire une recherche basée sur la chaîne de plus un nombre de caractères qui peuvent la suivre.
Les coller dans la cellule B1.
Vous devrez répéter le "&IF ((ISNA MATCH($G$5,A1, FALSE)), "", à GAUCHE($G$5,de RECHERCHE("*",$G$5,1)))" partie de chaque cellule dans la Colonne G, où vous avez une chaîne que vous souhaitez rechercher.
Puis copiez la formule dans la cellule B1 tout le chemin vers le bas en double-cliquant sur la croix dans le coin en bas à droite de la cellule.
Ce ne placez rien dans la cellule si il n'y a pas de match. Il n'est pas sensible à la casse, mais je serai le premier à admettre que si vos données sont dans toutes les casquettes qu'il apparaît, puis aller pour la réponse ci-dessus. C'est plus simple.