Bir dizenin başka bir dize içerip içermediğini kontrol edin


233

Bir dize içinde bir "," (virgül) içerip içermediğini bulmak istiyorum. Char-by-char okumak dışında başka bir seçeneğimiz var mı?


14
Sizin için INSTRçalışıyor mu ?
Stephen Quan

Yanıtlar:


386

Kullan Enstrumanı işlevini

Dim pos As Integer

pos = InStr("find the comma, in the string", ",")

15 poz verir

Bulunmazsa 0 döndürür

Bir excel formülü ile virgül bulmanız gerekiyorsa, =FIND(",";A1)işlevi kullanabilirsiniz .

Büyük / Instrküçük harfe duyarlı olmayan bir dizenin konumunu bulmak için kullanmak istiyorsanız , Instr'un üçüncü parametresini kullanın ve buna const vbTextCompare(ya da sert kalıplar için sadece 1) verin.

Dim posOf_A As Integer

posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

size 14 değerini verecektir.

Bu durumda başlangıç ​​konumunu, bağladığım spesifikasyonda belirtildiği gibi belirtmeniz gerektiğini unutmayın: Karşılaştırma belirtilirse, başlangıç ​​argümanı gereklidir.


4
Ama bulunan dize 0 konumundaysa ne olur? "0 dizininde bulundu" ve "bulunamadı (0)" arasında nasıl bir ayrım yaparsınız?
gEdringer

10
@gEdringer. Bulunacak dize başlangıçta olduğunda 1 değerini döndürür.
rene


23

Aynı tür şeyleri yapan, ancak metnin sonundan başlangıcına kadar aramaya başlayan InStrRev işlevi de vardır .

@ Rene'nin cevabı başına ...

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

... yine 15 değerini pos'a döndürür, ancak dizede "the" kelimesi gibi birden fazla arama dizesi varsa, o zaman:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

... 6 yerine 20 yerine dönecekti.


17

Rene'nin cevabına dayanarak, alt dize varsa DOĞRU veya yoksa YANLIŞ döndüren bir işlev de yazabilirsiniz:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
    Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function

3
Bu işlevde ne tür bir veritabanı hatası bekliyoruz? Hata yakalama ve hata mesajı tamamen anlamsız görünüyor.
Roobie Nuby

11
@RoobieNuby Bu benim varsayılan hata işlemem. Bunu tüm işlevlerime koydum çünkü bir şeyler ters giderse, personelin beni aramasını ve kendileri düzeltmeye çalışmamasını istiyorum.
Sinister Sakal
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.