Sprawdź, czy komórka zawiera podciąg

229

Czy jest wbudowana funkcja sprawdzania, czy komórka zawiera dany znak / podłańcuch?

Oznaczałoby to, że możesz stosować funkcje tekstowe, takie jak Left/ Right/ Midna zasadzie warunkowej, bez zgłaszania błędów w przypadku braku znaków ograniczających.

geotheory
źródło

Odpowiedzi:

374

Spróbuj użyć tego:

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

Zwróci, TRUEjeśli komórka A3zawiera Some Text.

gwin003
źródło
7
Przebiegły! Dzięki gwin003 :) Nadal jestem trochę zaskoczony, że nie ma bardziej intuicyjnej funkcji.
geotheory
18
Tak, zgadzam się, byłoby miło, gdyby była jakaś CONTAINS("Text", cell)funkcja.
gwin003
20
warto zauważyć, że w tym przypadku nie jest rozróżniana wielkość liter, a jeśli chcesz dopasować wielkość liter, powinieneś użyć FIND()zamiastSEARCH()
Code Jockey
7
dostał błąd przy użyciu ,zamiast ;. Po zmianie podanej formuły na =ISNUMBER(SEARCH("Some Text"; A3))to działało. Dzięki!
renatov
6
@renatov, który faktycznie zależy od ustawień regionalnych twojego systemu operacyjnego; w szczególności znak używany w „separatorze list”.
pepoluan
22

Poniższa formuła określa, czy tekst „SPRAWDŹ” pojawia się w komórce C10. Jeśli nie, wynik jest pusty. Jeśli tak, wynikiem jest praca „SPRAWDŹ”.

=IF(ISERROR(FIND("CHECK",C10,1)),"","CHECK")
Steve
źródło
Możesz użyć 4 spacji lub tabulacji na początku wiersza, aby podświetlić blok kodu.
NiematojakTomasz
@Steve, DZIĘKUJĘ;)
Dimitri
12

Ta formuła wydaje mi się bardziej intuicyjna:

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

zwraca PRAWDA, jeśli „SomeText” jest zawarty w A1.

Formuły IsNumber / Search i IsError / Find wspomniane w innych odpowiedziach z pewnością działają, ale zawsze potrzebuję zbyt często szukać pomocy lub eksperymentować z nimi w programie Excel.

Warren Stevens
źródło
12

Dla tych, którzy chcieliby to zrobić za pomocą jednej funkcji w instrukcji IF, używam

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

aby sprawdzić, czy podciąg tekstowy znajduje się w komórce A1

[UWAGA: TEKST musi zawierać gwiazdki]

dsm
źródło
Działa, ale użycie formuły COUNTIF, gdy ogromne dane powodują, że plik nie odpowiada, nawet rozmiar pliku staje się ogromny
Gaurravs
8

Sprawdź FIND()funkcję w Excelu.

Składnia:

FIND( substring, string, [start_position])

Zwraca, #VALUE!jeśli nie znajdzie podłańcucha.

paras_doshi
źródło
Tak zagnieżdżone w ISNUMBERtym również działa, tylko w przypadku rozróżniania wielkości liter.
geotheory
1

Lubię odpowiedź Rink.Attendant.6. Naprawdę chcę sprawdzić wiele ciągów i zrobiłem to w ten sposób:

Po pierwsze sytuacja: nazwy, które mogą być nazwami budowniczych domów lub nazwami społeczności, a ja muszę grupować budowniczych jako jedną grupę. Aby to zrobić, szukam słowa „konstruktor” lub „budownictwo” itp. Więc -

=IF(OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*builder*")),"Builder","Community")
Dawanie
źródło
Witamy w SO. Powinieneś przeczytać, co stanowi dobrą odpowiedź .
geotheory
Nie rozumiem, co to ma zrobić. Sprawdza budowniczego dwa razy, gdy przypuszczalnie raz wystarczy. Jeśli znajdzie konstruktora, zwróci konstruktora, w przeciwnym razie zwróci społeczność. Budowa słowa nigdzie się nie pojawia. Może coś takiego =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fantastyczny
Jest COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk
1

To stare pytanie, ale myślę, że nadal jest aktualne.

Ponieważ nie ma funkcji ZAWIERA, dlaczego nie zadeklarować jej w VBA? Poniższy kod używa funkcji VBA Instr, która szuka podłańcucha w ciągu znaków. Zwraca 0, gdy ciąg nie zostanie znaleziony.

Public Function CONTAINS(TextString As String, SubString As String) As Integer
    CONTAINS = InStr(1, TextString, SubString)
End Function
Bjorn
źródło
Dobry sposób na poprawę wydajności osobistej, ale kosztem odtwarzalności powiedziałbym :)
geotheory
0

Jest to stare pytanie, ale rozwiązaniem dla osób korzystających z programu Excel 2016 lub nowszych jest to, że można usunąć potrzebę zagnieżdżania struktur if przy użyciu nowego IFS( condition1, return1 [,condition2, return2] ...)warunkowego.

Sformatowałem go, aby był wizualnie bardziej zrozumiały, jak go używać w przypadku tego pytania:

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

Ponieważ SEARCHzwraca błąd, jeśli łańcuch nie zostanie znaleziony, otoczyłem go znakiem, ISERROR(...)=FALSEaby sprawdzić prawdę, a następnie zwrócił żądaną wartość. Byłoby wspaniale, gdyby SEARCHzwrócił 0 zamiast błędu czytelności, ale tak właśnie działa niestety.

Inną ważną kwestią jest to, że IFSzwróci dopasowanie, które znajdzie jako pierwsze, dlatego ważna jest kolejność. Na przykład, jeśli moje ciągi były takie Surf, Surfing, Surfsjak String1,String2,String3powyżej, a ciąg moich komórek Surfingbyłby zgodny na pierwszym terminie zamiast na drugim ze względu na istnienie podłańcucha Surf. Zatem wspólne mianowniki muszą być ostatnie na liście. My IFSmusiałaby być zamawiane Surfing, Surfs, Surfdo pracy prawidłowo (zamiana Surfingi Surfsrównież prace w tym prostym przykładzie), ale Surfmusiałby być ostatnim.

Shawn
źródło
większość będzie chciała zdolność if / else, innymi słowy wartość domyślna. Dodanie tego cytatu może poszerzyć atrakcyjność twojej odpowiedzi: „Nie ma możliwości ustawienia wartości domyślnej, jeśli wszystkie testy zwrócą FAŁSZ (tj. Wartość, jeśli fałsz). Zamiast tego wprowadź PRAWDA dla ostatniego testu, a następnie wartość, która ma zostać zwrócona jako wartość domyślna, jeśli FALSE ”
whitneyland
-3

Oto wzór, którego używam

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

Jim D.
źródło
To sprawdza, czy „.” jest zawarty w A1, a jeśli tak, zwraca ... liczbę znaków pozostałych w A1, zaczynając od „.”. Nie jestem pewien, czy dodatkowe obliczenia są tutaj istotne.
Klasa „Eh” Bacon
Co najmniej, użyjIFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch