Vérifier si une cellule contient une sous-chaîne

229

Existe-t-il une fonction intégrée pour vérifier si une cellule contient un caractère / sous-chaîne donné?

Cela signifierait que vous pouvez appliquer des fonctions textuelles comme Left/ Right/ Midsur une base conditionnelle sans lancer d'erreurs lorsque les caractères de délimitation sont absents.

géothéorie
la source

Réponses:

374

Essayez d'utiliser ceci:

=ISNUMBER(SEARCH("Some Text", A3))

Cela reviendra TRUEsi la cellule A3contient Some Text.

gwin003
la source
7
Ruse! Merci gwin003 :) Je suis toujours un peu surpris qu'il n'y ait pas de fonction plus intuitive pour cela.
geotheory
18
Oui, je suis d'accord, ce serait bien s'il y avait une CONTAINS("Text", cell)fonction.
gwin003
20
pourrait valoir la peine de noter que ce cas i est insensible, et si vous voulez faire correspondre la casse, vous devez utiliser FIND()à la place deSEARCH()
Code Jockey
7
a obtenu une erreur en utilisant ,au lieu de ;. Après avoir changé la formule fournie, =ISNUMBER(SEARCH("Some Text"; A3))cela a fonctionné. Merci!
renatov
6
@renatov qui dépend en fait des paramètres régionaux de votre système d'exploitation; en particulier, le caractère utilisé pour "séparateur de liste".
pepoluan
22

La formule suivante détermine si le texte "CHECK" apparaît dans la cellule C10. Si ce n'est pas le cas, le résultat est vide. Si c'est le cas, le résultat est le travail "CHECK".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")
Steve
la source
Vous pouvez utiliser 4 espaces ou tabulation au début de la ligne pour mettre en surbrillance le bloc de code.
NiematojakTomasz
@Steve, MERCI;)
Dimitri
12

Cette formule me semble plus intuitive:

=SUBSTITUTE(A1,"SomeText","") <> A1

cela renvoie VRAI si "SomeText" est contenu dans A1.

Les formules IsNumber / Search et IsError / Find mentionnées dans les autres réponses fonctionnent certainement, mais je me retrouve toujours à avoir besoin de consulter l'aide ou d'expérimenter dans Excel trop souvent avec celles-ci.

Warren Stevens
la source
12

Pour ceux qui souhaitent le faire en utilisant une seule fonction à l'intérieur de l'instruction IF, j'utilise

=IF(COUNTIF(A1,"*TEXT*"),TrueValue,FalseValue)

pour voir si la sous-chaîne TEXT est dans la cellule A1

[REMARQUE: TEXT doit être entouré d'astérisques]

dsm
la source
Cela fonctionne, mais l'utilisation de la formule COUNTIF lorsque des données volumineuses font que le fichier ne répond pas, même la taille du fichier devient énorme
Gaurravs
8

Découvrez la FIND()fonction dans Excel.

Syntaxe:

FIND( substring, string, [start_position])

Renvoie #VALUE!s'il ne trouve pas la sous-chaîne.

paras_doshi
la source
Oui imbriqué dans ISNUMBERcela fonctionne également, pour les correspondances sensibles à la casse uniquement.
géothèque
1

J'aime la réponse de Rink.Attendant.6. En fait, je veux vérifier plusieurs chaînes et je l'ai fait de cette façon:

Tout d'abord, la situation: les noms qui peuvent être des constructeurs de maisons ou des noms de communauté et je dois regrouper les constructeurs en un seul groupe. Pour ce faire, je recherche le mot "constructeur" ou "construction", etc. Donc -

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")
Dons
la source
Bienvenue chez SO. Vous devriez lire ce qui fait une bonne réponse .
geotheory
Je ne comprends pas ce que cela est censé faire .. il vérifie le constructeur deux fois alors qu'une fois suffit probablement. S'il trouve le constructeur, il renvoie le constructeur, sinon il renvoie la communauté. Le mot construction n'apparaît nulle part. Peut-être quelque chose comme ça =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
Fantabolous
Il y a COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk le
1

C'est une vieille question mais je pense qu'elle est toujours valable.

Puisqu'il n'y a pas de fonction CONTAINS, pourquoi ne pas la déclarer en VBA? Le code ci-dessous utilise la fonction VBA Instr, qui recherche une sous-chaîne dans une chaîne. Il renvoie 0 lorsque la chaîne n'est pas trouvée.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function
Bjorn
la source
Bon moyen d'améliorer l'efficacité personnelle, mais au détriment de la reproductibilité, je dirais :)
geotheory
0

C'est une vieille question, mais une solution pour ceux qui utilisent Excel 2016 ou une version plus récente est que vous pouvez supprimer le besoin de structures imbriquées if en utilisant le nouveau IFS( condition1, return1 [,condition2, return2] ...)conditionnel.

Je l'ai formaté pour le rendre visuellement plus clair sur la façon de l'utiliser pour le cas de cette question:

=IFS(
ISERROR(SEARCH("String1",A1))=FALSE,"Something1",
ISERROR(SEARCH("String2",A1))=FALSE,"Something2",
ISERROR(SEARCH("String3",A1))=FALSE,"Something3"
)

Étant donné que SEARCHrenvoie une erreur si une chaîne n'est pas trouvée, je l'ai enveloppée d'un ISERROR(...)=FALSEpour vérifier la vérité, puis renvoyer la valeur souhaitée. Ce serait génial si SEARCHrenvoyé 0 au lieu d'une erreur pour la lisibilité, mais c'est juste comment cela fonctionne malheureusement.

Une autre note importante est celle IFSqui rendra le match trouvé en premier et donc l'ordre est important. Par exemple, si mes chaînes étaient Surf, Surfing, Surfscomme String1,String2,String3ci-dessus et que ma chaîne de cellules l'était, Surfingelle correspondrait au premier terme au lieu du second en raison de la sous-chaîne Surf. Les dénominateurs communs doivent donc être les derniers de la liste. Mon IFSdevrait être ordonné Surfing, Surfs, Surfde fonctionner correctement (échange Surfinget Surfsfonctionnerait également dans cet exemple simple), mais Surfdevrait être le dernier.

Shawn
la source
la plupart voudront la capacité if / else, en d'autres termes une valeur par défaut. L'ajout de cette citation pourrait élargir l'attrait de votre réponse: "Il n'y a aucun moyen de définir une valeur par défaut si tous les tests retournent FAUX (c'est-à-dire une valeur si faux). Au lieu de cela, entrez VRAI pour le dernier test, puis une valeur à renvoyer en tant que valeur par défaut si FAUX "
whitneyland
-3

Voici la formule que j'utilise

=IF( ISNUMBER(FIND(".",A1)), LEN(A1) - FIND(".",A1), 0 )

Jim D
la source
Cela vérifie si "." est inclus dans A1, et s'il l'est, il renvoie ... le nombre de caractères restants dans A1, en commençant par ".". Je ne sais pas si ce calcul supplémentaire est pertinent ici.
Bacon `` Eh '
Au moins, utilisezIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch