Kiểm tra xem một chuỗi có chứa một chuỗi khác không


232

Tôi muốn tìm nếu một chuỗi có chứa "," (dấu phẩy) trong đó. Chúng ta có lựa chọn nào khác ngoài việc đọc char-by-char không?


14
INSTRlàm việc cho bạn?
Stephen Quan

Câu trả lời:


384

Sử dụng chức năng م

Dim pos As Integer

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

sẽ trở lại 15 trong pos

Nếu không tìm thấy nó sẽ trả về 0

Nếu bạn cần tìm dấu phẩy với công thức excel, bạn có thể sử dụng =FIND(",";A1)hàm.

Lưu ý rằng nếu bạn muốn sử dụng Instrđể tìm vị trí của chuỗi không phân biệt chữ hoa chữ thường, hãy sử dụng tham số thứ ba của م và cung cấp cho nó const vbTextCompare(hoặc chỉ 1 cho các điểm chết).

Dim posOf_A As Integer

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

sẽ cung cấp cho bạn một giá trị 14.

Lưu ý rằng bạn phải chỉ định vị trí bắt đầu trong trường hợp này như được nêu trong đặc tả tôi đã liên kết: Đối số bắt đầu là bắt buộc nếu so sánh được chỉ định.


4
Nhưng nếu chuỗi tìm thấy ở vị trí 0 thì sao? Làm thế nào để bạn phân biệt giữa "tìm thấy trên chỉ số 0" và "không tìm thấy (0)"?
gEdringer

10
@gEdringer. Khi chuỗi được tìm thấy là lúc bắt đầu, nó trả về 1.
rene


23

Ngoài ra còn có hàm InStrRev thực hiện cùng loại, nhưng bắt đầu tìm kiếm từ cuối văn bản đến đầu.

Mỗi câu trả lời của @ rene ...

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

... vẫn sẽ trả về 15 cho pos, nhưng nếu chuỗi có nhiều hơn một chuỗi tìm kiếm, như từ "the", thì:

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

... sẽ trả lại 20 cho pos, thay vì 6.


17

Dựa trên câu trả lời của Rene, bạn cũng có thể viết một hàm trả về TRUE nếu chuỗi con có mặt hoặc FALSE nếu nó không:

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
Loại lỗi cơ sở dữ liệu nào chúng ta mong đợi trong chức năng này? Bẫy lỗi và thông báo lỗi dường như là hoàn toàn vô nghĩa.
Roobie Nuby

11
@RoobieNuby Đó chỉ là cách xử lý lỗi mặc định của tôi. Tôi đặt nó vào tất cả các chức năng của mình bởi vì nếu có sự cố xảy ra, tôi muốn nhân viên gọi cho tôi, không phải tự mình thử và sửa nó.
Râu nham hiểm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.