ตรวจสอบว่าสตริงมีสตริงอื่นหรือไม่


233

ฉันต้องการค้นหาว่าสตริงมี "," (เครื่องหมายจุลภาค) อยู่หรือไม่ เรามีตัวเลือกอื่นนอกเหนือจากการอ่าน char-by-char หรือไม่?


14
ไม่INSTRทำงานสำหรับคุณ?
Stephen Quan

คำตอบ:


386

ใช้ฟังก์ชั่นInstr

Dim pos As Integer

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

จะส่งคืน 15 ใน pos

หากไม่พบจะส่งคืนค่า 0

หากคุณต้องการค้นหาเครื่องหมายจุลภาคด้วยสูตร excel คุณสามารถใช้=FIND(",";A1)ฟังก์ชันได้

โปรดสังเกตว่าหากคุณต้องการใช้Instrเพื่อค้นหาตำแหน่งของสตริงที่ไม่ต้องคำนึงถึงตัวพิมพ์เล็กและใหญ่ให้ใช้พารามิเตอร์ที่สามของ Instr และให้ const vbTextCompare(หรือเพียง 1 สำหรับ Die-hards)

Dim posOf_A As Integer

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

จะให้ค่า 14

โปรดทราบว่าคุณต้องระบุตำแหน่งเริ่มต้นในกรณีนี้ตามที่ระบุไว้ในสเปคที่ฉันเชื่อมโยง: อาร์กิวเมนต์เริ่มต้นเป็นสิ่งจำเป็นหากระบุการเปรียบเทียบ


4
แต่ถ้าสตริงที่พบอยู่ในตำแหน่ง 0 คุณแยกความแตกต่างระหว่าง "พบในดัชนี 0" และ "ไม่พบ (0)" อย่างไร
gEdringer

10
@gEdringer เมื่อพบสตริงที่จุดเริ่มต้นมันจะส่งกลับค่า 1
rene


23

นอกจากนี้ยังมีฟังก์ชั่นInStrRevซึ่งทำสิ่งประเภทเดียวกัน แต่เริ่มค้นหาจากจุดสิ้นสุดของข้อความถึงจุดเริ่มต้น

ต่อคำตอบของ @ rene ...

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

... จะยังคงคืนค่า 15 ให้เป็น pos แต่ถ้าสตริงมีมากกว่าหนึ่งในสตริงการค้นหาเช่นคำว่า "the" ดังนั้น:

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

... จะคืนค่า 20 ให้เป็น pos แทนที่จะเป็น 6


17

เมื่อสร้างคำตอบของ Rene คุณสามารถเขียนฟังก์ชันที่ส่งกลับค่า TRUE หากมีสตริงย่อยอยู่หรือเป็น FALSE หากไม่ใช่:

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
เราคาดหวังข้อผิดพลาดของฐานข้อมูลแบบใดในฟังก์ชันนี้ การดักข้อผิดพลาดและข้อความแสดงข้อผิดพลาดดูเหมือนจะไม่มีจุดหมายทั้งหมด
Roobie Nuby

11
@RoobieNuby นั่นเป็นเพียงการจัดการข้อผิดพลาดเริ่มต้นของฉัน ฉันใส่มันในทุกฟังก์ชั่นของฉันเพราะถ้ามีอะไรผิดพลาดฉันต้องการให้พนักงานโทรหาฉันไม่ลองและแก้ไขด้วยตัวเอง
Sinister Beard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.