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.