Hàm INSTR
Hàm Hướng dẫn VBA kiểm tra xem một chuỗi văn bản có được tìm thấy trong một chuỗi văn bản khác hay không. Nó trả về 0 nếu không tìm thấy văn bản. Nếu không, nó trả về vị trí ký tự nơi văn bản được tìm thấy.
Chức năng hướng dẫn thực hiện chính xác diêm. Toán tử VBA Like có thể được sử dụng thay thế để thực hiện đối sánh không chính xác / đối sánh mẫu bằng cách sử dụng Ký tự đại diện.
Ví dụ về hướng dẫn
Đoạn mã sau tìm kiếm trong chuỗi “Tìm trong chuỗi này” cho từ “Nhìn”. Hàm hướng dẫn trả về 1 vì văn bản được tìm thấy ở vị trí đầu tiên.
123 | Sub FindSomeText ()MsgBox InStr ("Tìm trong chuỗi này", "Tìm")Kết thúc Sub |
Ví dụ thứ hai này trả về 7 vì văn bản được tìm thấy bắt đầu ở vị trí thứ 7:
123 | Sub FindSomeText2 ()MsgBox InStr ("Không tìm trong chuỗi này", "Nhìn")Kết thúc Sub |
Quan trọng! Chức năng hướng dẫn là trường hợp nhạy cảm theo mặc định. Điều này có nghĩa là "nhìn" sẽ không khớp với "Nhìn". Để làm cho test không phân biệt chữ hoa chữ thường, hãy đọc phần bên dưới.
Cú pháp hướng dẫn
Cú pháp cho chức năng hướng dẫn như sau:
1 | Hướng dẫn ([bắt đầu], chuỗi, chuỗi con, [so sánh]) |
[bắt đầu] (tùy chọn) - Đối số tùy chọn này là vị trí bắt đầu của tìm kiếm. Nhập 1 để bắt đầu tìm kiếm từ vị trí 1 (hoặc để trống). Nhập 5 để bắt đầu tìm kiếm từ vị trí 5. Quan trọng! Hàm INSTR tính toán vị trí ký tự bằng cách đếm từ 1 KHÔNG phải từ vị trí [bắt đầu].
dây - Chuỗi văn bản cần tìm kiếm.
chuỗi con - Chuỗi văn bản cần tìm trong chuỗi chính.
[so sánh] (tùy chọn) - Theo mặc định, Guid có phân biệt chữ hoa chữ thường. Bằng cách đặt đối số này, bạn có thể làm cho hướng dẫn không phân biệt chữ hoa chữ thường:
Đối số vb Giá trị | Số nguyên đối số | Sự miêu tả |
vbBinaryCompare |
0 | (Mặc định) Phân biệt chữ hoa chữ thường |
vbTextCompare |
1 | Không phân biệt chữ hoa chữ thường |
vbDatabaseCompare |
2 | Chỉ truy cập MS. Sử dụng thông tin trong cơ sở dữ liệu để thực hiện so sánh. |
Hướng dẫn vị trí bắt đầu
Vị trí bắt đầu hướng dẫn cho phép bạn chỉ ra vị trí ký tự nơi bạn sẽ bắt đầu tìm kiếm. Tuy nhiên, hãy ghi nhớ rằng đầu ra hướng dẫn sẽ luôn được tính từ 1.
Ở đây chúng tôi đặt vị trí bắt đầu thành 3 để bỏ qua B đầu tiên:
123 | Sub Guid_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")Kết thúc Sub |
Kết quả là 6 vì chữ B thứ hai là ký tự thứ 6 trong chuỗi.
Kiểm tra INSTR phân biệt chữ hoa chữ thường
Theo mặc định, VBA xử lý “L” khác với “l”. Nói cách khác, VBA phân biệt chữ hoa chữ thường. Điều này đúng với tất cả các hàm văn bản. Để làm cho VBA không phân biệt chữ hoa chữ thường, hãy đặt đối số [so sánh] thành 1 hoặc vbTextCompare.
123 | Public Sub FindText_IgnoreCase ()MsgBox InStr (1, "Không tìm trong chuỗi này", "nhìn", vbTextCompare)Kết thúc Sub |
Ngoài ra, bạn có thể thêm Văn bản So sánh Tùy chọn vào đầu mô-đun mã của mình:
1 | Tùy chọn So sánh Văn bản |
12345 | Tùy chọn So sánh Văn bảnPublic Sub FindText_IgnoreCase2 ()MsgBox InStr ("Không tìm trong chuỗi này", "nhìn")Kết thúc Sub |
Tùy chọn So sánh Văn bản sẽ ảnh hưởng đến tất cả mã trong mô-đun đó. Cá nhân tôi đặt điều này ở đầu bất kỳ mô-đun nào liên quan đến văn bản bởi vì tôi không bao giờ quan tâm đến sự khác biệt về chữ hoa và chữ thường.
Chức năng hướng dẫn
Chức năng hướng dẫn tìm kiếm từ bên trái. Thay vào đó, bạn có thể tìm kiếm từ bên phải bằng cách sử dụng Chức năng hướng dẫn. Hàm GuideRev hoạt động tương tự như hàm lệnh.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Tìm trong chuỗi này", "Nhìn")Kết thúc Sub |
Cũng giống như chức năng Hướng dẫn, hàm này sẽ trả về 1 vì chỉ có một trường hợp “Nhìn” trong văn bản. Nhưng nếu chúng ta thêm "Cái nhìn" thứ hai, bạn sẽ thấy rằng nó trả về vị trí của "Cái nhìn" ngoài cùng bên phải:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Tìm trong chuỗi này. Nhìn", "Nhìn")Kết thúc Sub |
Tiếp theo, chúng tôi sẽ xem xét thêm các ví dụ về hướng dẫn.
Ví dụ về chuỗi
Nếu chuỗi có chứa chuỗi con
Ở đây chúng ta sẽ sử dụng câu lệnh If để kiểm tra xem một chuỗi có chứa một chuỗi văn bản con hay không:
123456789 | Public Sub FindSomeText ()Nếu InStr ("Tìm trong chuỗi này", "nhìn") = 0 ThìMsgBox "Không khớp"KhácMsgBox "Ít nhất một kết quả phù hợp"Kết thúc nếuKết thúc Sub |
Tìm chuỗi văn bản trong một ô
Bạn cũng có thể tìm thấy một chuỗi trong một ô:
12345 | Sub Find_String_Cell ()Nếu InStr (Phạm vi ("B2"). Giá trị, "Tiến sĩ")> 0 ThìPhạm vi ("C2"). Giá trị = "Bác sĩ"Kết thúc nếuKết thúc Sub |
Hoặc lặp qua một loạt các ô để kiểm tra xem các ô có chứa một số văn bản hay không:
12345678910 | Sub Search_Range_For_Text ()Làm mờ ô dưới dạng phạm viĐối với mỗi ô trong phạm vi ("b2: b6")Nếu InStr (cell.Value, "Dr.")> 0 Thìcell.Offset (0, 1) .Value = "Bác sĩ"Kết thúc nếuÔ tiếp theoKết thúc Sub |
Tìm vị trí của một ký tự trong một chuỗi
Đoạn mã này sẽ tìm vị trí của một ký tự trong một chuỗi và gán vị trí cho một biến:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Đây Nhìn Đây", "L")Kết thúc Sub |
Chuỗi tìm kiếm cho Word
Mã này sẽ tìm kiếm một chuỗi cho một từ:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Đây Nhìn Đây", "Nhìn")Nếu n = 0 ThìMsgBox "Không tìm thấy từ"KhácMsgBox "Từ tìm thấy trong vị trí:" & nKết thúc nếuKết thúc Sub |
Nếu biến chứa chuỗi
Mã này sẽ kiểm tra xem một biến chuỗi có chứa một chuỗi văn bản hay không:
12345678 | Biến phụ_Contains_String ()Dim str As Stringstr = "Nhìn ở đây"Nếu InStr (str, "Tại đây")> 0 ThìMsgBox "Đã tìm thấy ở đây!"Kết thúc nếuKết thúc Sub |
Hướng dẫn và Chức năng Bên trái
Hướng dẫn có thể được sử dụng cùng với các chức năng văn bản khác như Left, Right, Len và Mid để cắt văn bản.
Với chức năng Left, bạn có thể xuất văn bản trước một chuỗi văn bản:
1234567891011 | Hướng dẫn phụ ()Dim str As StringDim n As Longstr = "Nhìn ở đây"n = InStr (str, "Đây")MsgBox Left (str, n - 1)Kết thúc Sub |
Sử dụng hướng dẫn trong Microsoft Access VBA
Tất cả các ví dụ trên đều hoạt động hoàn toàn giống nhau trong Access VBA cũng như trong Excel VBA.
Để tìm hiểu thêm, hãy đọc bài viết của chúng tôi: Các hàm văn bản VBA