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.

Odpowiedzi:


374

Spróbuj użyć tego:

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

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


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")

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.


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]


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.


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")

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

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.


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 )


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.