Überprüfen Sie, ob eine Zelle einen Teilstring enthält

229

Gibt es eine eingebaute Funktion, um zu überprüfen, ob eine Zelle ein bestimmtes Zeichen / eine bestimmte Teilzeichenfolge enthält?

Dies würde bedeuten, dass Sie Textfunktionen wie Left// Right/ Midunter bestimmten Bedingungen anwenden können, ohne Fehler auszulösen, wenn keine Trennzeichen vorhanden sind.

Geotheorie
quelle

Antworten:

374

Versuchen Sie Folgendes:

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

Dies wird zurückgegeben, TRUEwenn die Zelle A3enthält Some Text.

gwin003
quelle
7
Gerissen! Danke gwin003 :) Ich bin immer noch ein bisschen überrascht, dass es dafür keine intuitivere Funktion gibt.
Geotheory
18
Ja, ich stimme zu, es wäre schön, wenn es eine CONTAINS("Text", cell)Funktion gäbe .
Gwin003
20
Es könnte sich lohnen, darauf hinzuweisen, dass in diesem Fall die Groß- und Kleinschreibung nicht berücksichtigt wird. Wenn Sie mit dem Fall übereinstimmen möchten, sollten Sie FIND()anstelle vonSEARCH()
Code Jockey
7
habe einen Fehler mit ,statt ;. Nach dem Ändern der bereitgestellten Formel =ISNUMBER(SEARCH("Some Text"; A3))funktionierte es. Vielen Dank!
Renatov
6
@renatov, das tatsächlich vom Gebietsschema Ihres Betriebssystems abhängt ; speziell das Zeichen für "Listentrennzeichen".
Pepoluan
22

Die folgende Formel bestimmt, ob der Text "CHECK" in Zelle C10 erscheint. Ist dies nicht der Fall, ist das Ergebnis leer. Wenn ja, ist das Ergebnis die Arbeit "CHECK".

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")
Steve
quelle
Sie können 4 Leerzeichen oder Tabulatoren am Zeilenanfang verwenden, um den Codeblock hervorzuheben.
NiematojakTomasz
@ Steve, DANKE;)
Dimitri
12

Diese Formel erscheint mir intuitiver:

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

Dies gibt TRUE zurück, wenn "SomeText" in A1 enthalten ist.

Die in den anderen Antworten erwähnten Formeln IsNumber / Search und IsError / Find funktionieren zwar, aber ich muss immer zu oft auf die Hilfe schauen oder in Excel mit diesen experimentieren.

Warren Stevens
quelle
12

Für diejenigen, die dies mit einer einzigen Funktion innerhalb der IF-Anweisung tun möchten, verwende ich

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

um zu sehen, ob sich der Teilstring TEXT in Zelle A1 befindet

[HINWEIS: TEXT muss mit Sternchen versehen sein]

dsm
quelle
Es funktioniert, aber die Verwendung der COUNTIF-Formel bei großen Datenmengen führt dazu, dass die Datei nicht reagiert, selbst die Dateigröße wird riesig
Gaurravs
8

Überprüfen Sie die FIND()Funktion in Excel.

Syntax:

FIND( substring, string, [start_position])

Gibt zurück, #VALUE!wenn der Teilstring nicht gefunden wird.

paras_doshi
quelle
Ja, ISNUMBERdies funktioniert auch, wenn nur zwischen Groß- und Kleinschreibung unterschieden wird.
Geotheory
1

Ich mag Rink.Attendant.6 Antwort. Ich möchte tatsächlich nach mehreren Zeichenfolgen suchen und habe es folgendermaßen gemacht:

Zuerst die Situation: Namen, die Bauherren oder Community-Namen sein können, und ich muss die Bauherren als eine Gruppe zusammenfassen. Dazu suche ich das Wort "Baumeister" oder "Bau" usw. Also -

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")
Geben
quelle
Willkommen bei SO. Sie sollten nachlesen, was eine gute Antwort ausmacht .
Geotheory
Ich verstehe nicht, was dies tun soll. Es sucht zweimal nach dem Builder, wenn vermutlich einmal ausreichen würde. Wenn es einen Builder findet, gibt es einen Builder zurück, andernfalls gibt es eine Community zurück. Das Wort Konstruktion erscheint nirgendwo. Vielleicht so etwas wie =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fantastisch
Es gibt COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk
1

Es ist eine alte Frage, aber ich denke, sie ist immer noch gültig.

Da es keine CONTAINS-Funktion gibt, können Sie sie in VBA deklarieren. Der folgende Code verwendet die VBA Instr-Funktion, die nach einer Teilzeichenfolge in einer Zeichenfolge sucht. Es gibt 0 zurück, wenn die Zeichenfolge nicht gefunden wird.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function
Björn
quelle
Guter Weg, um die persönliche Effizienz zu verbessern, aber auf Kosten der Reproduzierbarkeit würde ich sagen :)
Geotheory
0

Dies ist eine alte Frage, aber eine Lösung für Benutzer von Excel 2016 oder neuer ist, dass Sie die Notwendigkeit verschachtelter if-Strukturen mithilfe der neuen IFS( condition1, return1 [,condition2, return2] ...)Bedingung entfernen können.

Ich habe es formatiert, um visuell klarer zu machen, wie es für den Fall dieser Frage verwendet werden soll:

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

Da SEARCHein Fehler zurückgegeben wird, wenn ein String nicht gefunden wird, habe ich ihn mit einem umbrochen ISERROR(...)=FALSE, um die Wahrheit zu überprüfen und dann den gewünschten Wert zurückzugeben. Es wäre toll, wenn SEARCH0 anstelle eines Fehlers für die Lesbarkeit zurückgegeben würde, aber genau so funktioniert es leider.

Ein weiterer wichtiger Hinweis ist, dass IFSdie zuerst gefundene Übereinstimmung zurückgegeben wird und daher die Reihenfolge wichtig ist. Wenn zum Beispiel meine Zeichenfolgen Surf, Surfing, Surfswie String1,String2,String3oben und meine Zellenzeichenfolge Surfingwären, würde sie aufgrund des Teilstrings mit dem ersten Term anstelle des zweiten übereinstimmen Surf. Daher müssen gemeinsame Nenner die letzten in der Liste sein. Mein IFSmüsste bestellt werden Surfing, Surfs, Surf, um korrekt zu funktionieren (Tauschen Surfingund Surfswürde auch in diesem einfachen Beispiel funktionieren), Surfmüsste aber der letzte sein.

Shawn
quelle
Die meisten wollen if / else-Fähigkeit, mit anderen Worten einen Standardwert. Das Hinzufügen dieses Zitats kann die Attraktivität Ihrer Antwort erweitern: "Es gibt keine Möglichkeit, einen Standard festzulegen, wenn alle Tests FALSE zurückgeben (dh einen Wert, wenn false). Geben Sie stattdessen TRUE für den letzten Test und dann einen Wert ein, der als a zurückgegeben werden soll Standardwert wenn FALSE "
Whitneyland
-3

Hier ist die Formel, die ich benutze

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

Jim D.
quelle
Dies prüft, ob "." ist in A1 enthalten, und wenn dies der Fall ist, wird ... die Anzahl der in A1 verbleibenden Zeichen zurückgegeben, beginnend mit ".". Ich bin mir nicht sicher, ob diese zusätzliche Berechnung hier relevant ist.
Note 'Eh' Bacon
Verwenden Sie am wenigstenIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch