Periksa apakah string berisi string lain

233

Saya ingin mencari apakah string berisi "," (koma) di dalamnya. Apakah kita punya pilihan lain selain membaca char-by-char?

krishna
sumber
14
Apakah INSTRberhasil untuk Anda?
Stephen Quan

Jawaban:

386

Gunakan fungsi Instr

Dim pos As Integer

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

akan mengembalikan 15 dalam pos

Jika tidak ditemukan akan mengembalikan 0

Jika Anda perlu menemukan koma dengan rumus excel, Anda dapat menggunakan =FIND(",";A1)fungsi ini.

Perhatikan bahwa jika Anda ingin menggunakan Instruntuk menemukan posisi string case-insensitive gunakan parameter ketiga dari Instr dan berikan const vbTextCompare(atau hanya 1 untuk die-hards).

Dim posOf_A As Integer

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

akan memberi Anda nilai 14.

Perhatikan bahwa Anda harus menentukan posisi awal dalam kasus ini seperti yang dinyatakan dalam spesifikasi yang ditautkan: Argumen awal diperlukan jika perbandingan ditentukan.

rene
sumber
4
Tetapi bagaimana jika string yang ditemukan ada di posisi 0? Bagaimana Anda membedakan antara "ditemukan pada indeks 0" dan "tidak ditemukan (0)"?
gEdringer
10
@ gEdringer. Ketika string yang ditemukan adalah pada awalnya, string akan mengembalikan 1.
rene
69

Anda juga dapat menggunakan kata khusus like:

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub
Makah
sumber
3
Tautan ke format pola msdn.microsoft.com/en-us/library/…
Matthew Lock
23

Ada juga InStrRev fungsi yang melakukan jenis hal yang sama, tetapi mulai mencari dari akhir teks ke awal.

Per @ rene menjawab ...

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

... masih akan mengembalikan 15 ke pos, tetapi jika string memiliki lebih dari satu string pencarian, seperti kata "the", maka:

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

... akan mengembalikan 20 ke pos, bukannya 6.

LimaNightHawk
sumber
17

Berdasarkan jawaban Rene, Anda juga bisa menulis fungsi yang mengembalikan TRUE jika substring ada, atau FALSE jika bukan:

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
Jenggot Seram
sumber
3
Apa jenis kesalahan database yang kita harapkan dalam fungsi ini? Perangkap kesalahan dan pesan kesalahan tampaknya sama sekali tidak ada gunanya.
Roobie Nuby
11
@RoobieNuby Itu hanya penanganan kesalahan default saya. Saya memasukkannya ke dalam semua fungsi saya karena jika terjadi kesalahan, saya ingin staf memanggil saya, bukan untuk mencoba dan memperbaikinya sendiri.
Jenggot Seram