Bir hücrenin alt dize içerip içermediğini kontrol edin


229

Bir hücrenin belirli bir karakter / alt dize içerip içermediğini kontrol etmek için yerleşik bir işlev var mı?

Bu, karakterleri sınırlarken yokken hata atmadan koşullu olarak Left/ Right/ gibi metinsel işlevleri uygulayabileceğiniz anlamına gelir Mid.

Yanıtlar:


374

Bunu kullanmayı deneyin:

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

TRUEHücre A3içeriyorsa bu geri döner Some Text.


7
Marifetli! Teşekkürler gwin003 :) Bunun için daha sezgisel bir işlev olmadığına hala biraz şaşırdım.
geotheory

18
Evet katılıyorum, bir CONTAINS("Text", cell)fonksiyon olsaydı iyi olurdu .
gwin003

20
Bu i büyük / küçük harf duyarsız olduğunu ve buna eşleşmek istiyorsanız FIND(), yerine kullanmalısınızSEARCH()
Kod Jokey

7
,yerine bir hata aldım ;. Sağlanan formülü değiştirdikten sonra =ISNUMBER(SEARCH("Some Text"; A3))çalıştı. Teşekkürler!
renatov

6
aslında işletim sisteminizin yerel ayarına bağlı olan @renatov ; özellikle, "liste ayırıcı" için kullanılan karakter.
pepoluan

22

Aşağıdaki formül, C10 hücresinde "CHECK" metninin görünüp görünmeyeceğini belirler. Değilse, sonuç boştur. Eğer öyleyse, sonuç "CHECK" çalışmasıdır.

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

Kod bloğunu vurgulamak için satırın başında 4 boşluk veya sekme kullanabilirsiniz.
NiematojakTomasz

@Steve, TEŞEKKÜR EDERİZ;)
Dimitri

12

Bu formül benim için daha sezgisel görünüyor:

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

A1 içinde "SomeText" varsa bu TRUE değerini döndürür.

Diğer cevaplarda bahsedilen IsNumber / Search ve IsError / Find formülleri kesinlikle işe yarıyor, ancak kendimi her zaman yardıma bakmaya veya Excel'de bu türlerle çok sık denemeye ihtiyaç duyuyorum.


12

Bunu IF deyimi içinde tek bir işlev kullanarak yapmak isteyenler için

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

alt dize METİN A1 hücresinde olup olmadığını görmek için

[NOT: TEXT'in çevresinde yıldız işaretleri olması gerekir]


Çalışıyor, ancak büyük veriler olduğunda COUNTIF formülünün kullanılması, dosyanın yanıt vermemesini sağlıyor, hatta dosya boyutu çok büyük oluyor
Gaurravs

8

FIND()Excel'deki işlevi kontrol edin .

Sözdizimi:

FIND( substring, string, [start_position])

Alt #VALUE!dizeyi bulamazsa döndürür .


ISNUMBERBu iç içe Evet , yalnızca büyük / küçük harfe duyarlı eşleşmeler için de geçerlidir.
geotheory

1

Rink.Attendant.6 cevabını seviyorum. Aslında birden çok dizeleri kontrol etmek istiyorum ve bu şekilde yaptım:

Öncelikle durum: Ev inşaatçıları veya topluluk isimleri olabilecek isimler ve inşaatçıları bir grup olarak gruplandırmam gerekiyor. Bunu yapmak için ben "oluşturucu" veya "inşaat", vb arıyorum. Yani -

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

SO hoş geldiniz. Neyin iyi bir cevap verdiğini okumalısınız .
geotheory

Bunun ne anlama geldiğini anlamıyorum .. muhtemelen bir kez yeterli olacağı zaman inşaatçı iki kez kontrol eder. Oluşturucu bulursa oluşturucu döndürür, aksi takdirde topluluk döndürür. İnşaat kelimesi hiçbir yerde görünmüyor. Belki bir şey =OR(COUNTIF(A1,"*builder*"),COUNTIF(A1,"*construction*"))?
fevkalade

Var COUNTIFS:COUNTIFS(A1,"*builder*",A1,"*construction*")
vstepaniuk

1

Bu eski bir soru ama bence hala geçerli.

CONTAINS işlevi olmadığından, neden VBA'da bildirilmiyor? Aşağıdaki kod, bir dizede bir alt dize arayan VBA Enstrüman işlevini kullanır. Dize bulunamadığında 0 değerini döndürür.

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

Kişisel verimliliği artırmak için iyi bir yol, ancak tekrarlanabilirlik pahasına söyleyebilirim :)
geotheory

0

Bu eski bir soru ama Excel 2016 veya daha yenisini kullananlar için bir çözüm, yeni IFS( condition1, return1 [,condition2, return2] ...)koşulu kullanarak yapıların iç içe geçmesi ihtiyacını kaldırabilirsiniz .

Bu soru için görsel olarak nasıl kullanılacağı konusunda daha net hale getirmek için biçimlendirdim:

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

Yana SEARCHbir dize bulunmazsa getiriler bir hata Bir ile sarılmış ISERROR(...)=FALSEgerçeği denetlemek ve ardından değeri istedik dönmek için. SEARCHOkunabilirlik için bir hata yerine 0 döndürürseniz harika olurdu , ancak bu ne yazık ki nasıl çalıştığını gösteriyor.

Bir diğer önemli not, IFSilk bulduğu maçı geri getireceğidir ve bu nedenle sıralama önemlidir. Örneğin benim dizeleri sanki Surf, Surfing, Surfsolarak String1,String2,String3yukarıda ve benim hücreleri dize oldu Surfingçünkü alt dize varlığının saniyenin yerine ilk vadede eşleşir Surf. Bu nedenle, ortak paydaların listede sonuncu olması gerekir. Siparişimin IFSalınması gerekirSurfing, Surfs, Surf düzgün çalışması (takas Surfingve Surfsbu basit örnekte de işe yarayacaktı), ama Surfson olması gerekir.


çoğu eğer / else yeteneği, diğer bir deyişle varsayılan bir değer isteyecektir. Bu alıntıyı eklemek cevabınızın cazibesini genişletebilir: "Tüm testler YANLIŞ döndürürse (yani yanlışsa bir değer) bir varsayılan belirlemenin yolu yoktur. Bunun yerine, son test için DOĞRU değerini ve ardından FALSE ise varsayılan değer "
whitneyland

-3

İşte kullandığım formül

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


Bu, "." A1'e dahil edilir ve öyleyse, ... "ile başlayarak A1'de kalan karakter sayısını döndürür. Ek hesaplamanın burada alakalı olup olmadığından emin değilim.
'Eh' Bacon derecesi

En az, kullanın IFERROR(LEN(A1) - FIND(".", A1), 0)
Nigel Touch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.