Controlla se una cella contiene una sottostringa


229

Esiste una funzione integrata per verificare se una cella contiene un determinato carattere / sottostringa?

Significherebbe che è possibile applicare funzioni testuali come Left/ Right/ Midsu base condizionale senza generare errori quando delimitare i caratteri è assente.

Risposte:


374

Prova a usare questo:

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

Questo restituirà TRUEse la cella A3contiene Some Text.


7
Abile! Grazie gwin003 :) Sono ancora un po 'sorpreso che non ci sia una funzione più intuitiva per questo.
geotheory,

18
Sì, sono d'accordo, sarebbe bello se ci fosse una CONTAINS("Text", cell)funzione.
gwin003,

20
potrebbe valere la pena notare che questo caso insensibile, e se si desidera abbinare il caso, è necessario utilizzare FIND()al posto diSEARCH()
Code Jockey

7
ha ricevuto un errore usando ,invece di ;. Dopo aver modificato la formula fornita in =ISNUMBER(SEARCH("Some Text"; A3))esso ha funzionato. Grazie!
Renatov,

6
@renatov che in realtà dipende dalle impostazioni locali del tuo sistema operativo; in particolare, il carattere utilizzato per "separatore elenco".
pepoluan,

22

La seguente formula determina se il testo "CHECK" appare nella cella C10. In caso contrario, il risultato è vuoto. In tal caso, il risultato è il lavoro "VERIFICA".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")

È possibile utilizzare 4 spazi o tab all'inizio della riga per evidenziare il blocco di codice.
NiematojakTomasz,

@Steve, GRAZIE;)
Dimitri,

12

Questa formula mi sembra più intuitiva:

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

questo restituisce VERO se "SomeText" è contenuto in A1.

Le formule IsNumber / Search e IsError / Find menzionate nelle altre risposte sicuramente funzionano, ma mi trovo sempre a dover consultare l'aiuto o sperimentare Excel troppo spesso con quelle.


12

Per coloro che vorrebbero farlo utilizzando un'unica funzione all'interno dell'istruzione IF, io uso

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

per vedere se la sottostringa TEXT è nella cella A1

[NOTA: TEXT deve contenere asterischi]


Funziona, ma l'uso della formula COUNTIF quando i dati enormi, rende il file non risponde, anche le dimensioni del file diventano enormi
Gaurravs

8

Scopri la FIND()funzione in Excel.

Sintassi:

FIND( substring, string, [start_position])

Restituisce #VALUE!se non trova la sottostringa.


Sì, nidificato anche in ISNUMBERquesto caso, solo per le corrispondenze maiuscole / minuscole.
geotheory

1

Mi piace la risposta Rink.Attendant.6. In realtà voglio controllare più stringhe e l'ho fatto in questo modo:

Innanzitutto la situazione: nomi che possono essere costruttori domestici o nomi di comunità e ho bisogno di raggruppare i costruttori come un unico gruppo. Per fare questo sto cercando la parola "costruttore" o "costruzione", ecc. Quindi -

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")

Benvenuti in SO. Dovresti leggere su ciò che rende una buona risposta .
geoteca il

Non capisco cosa significhi fare questo ... controlla due volte il costruttore quando presumibilmente sarebbe sufficiente una volta. Se trova builder restituisce builder, altrimenti restituisce community. La parola costruzione non appare da nessuna parte. Forse qualcosa del genere =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fantastico

C'è COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk, il

1

È una vecchia domanda ma penso che sia ancora valida.

Poiché non esiste alcuna funzione CONTAINS, perché non dichiararla in VBA? Il codice seguente utilizza la funzione VBA Instr, che cerca una sottostringa in una stringa. Restituisce 0 quando la stringa non viene trovata.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function

Buon modo per migliorare l'efficienza personale, ma a costo di riproducibilità direi :)
geotheory

0

Questa è una vecchia domanda, ma una soluzione per coloro che usano Excel 2016 o più recenti è che puoi rimuovere la necessità di strutture nidificate usando il nuovo IFS( condition1, return1 [,condition2, return2] ...)condizionale.

L'ho formattato per renderlo visivamente più chiaro su come usarlo per il caso di questa domanda:

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

Poiché SEARCHrestituisce un errore se non viene trovata una stringa, l'ho racchiuso in un ISERROR(...)=FALSEper verificare la verità e quindi restituire il valore desiderato. Sarebbe bello se SEARCHrestituito 0 invece di un errore di leggibilità, ma purtroppo funziona così.

Un'altra nota importante è che IFSrestituirà la partita che trova per prima e quindi l'ordinamento è importante. Ad esempio, se le mie stringhe fossero Surf, Surfing, Surfscome String1,String2,String3sopra e la stringa delle mie celle fosse Surfing, corrisponderebbe al primo termine anziché al secondo a causa della sottostringa Surf. Pertanto i denominatori comuni devono essere gli ultimi dell'elenco. Il mio IFSdovrebbe essere ordinato Surfing, Surfs, Surfper funzionare correttamente (lo scambio Surfinge Surfsfunzionerebbe anche in questo semplice esempio), ma Surfdovrebbe essere l'ultimo.


la maggior parte vorrà l'abilità if / else, in altre parole un valore predefinito. L'aggiunta di questa citazione potrebbe ampliare il fascino della tua risposta: "Non c'è modo di impostare un valore predefinito se tutti i test restituiscono FALSE (ovvero un valore se falso). Invece, inserisci TRUE per l'ultimo test e quindi un valore da restituire come valore predefinito se FALSO "
Whitneyland,

-3

Ecco la formula che sto usando

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


Questo controlla se "." è incluso in A1 e, se lo è, restituisce ... il numero di caratteri rimanenti in A1, che inizia con ".". Non sono sicuro se questo calcolo aggiuntivo sia rilevante qui.
Grado 'Eh' Bacon

Almeno, usaIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.