Toán tử Like trong VBA

  • Thread starter thanhphong
  • Ngày gửi
T

thanhphong

Guest
  1. Cấu trúc Not Like và Like
  2. Tìm kiếm chuỗi ký tự chứa một chuỗi ký tự khác (Like)
  3. Tìm kiếm chuỗi ký tự không chứa chuỗi ký tự khác

1. Cấu trúc Not Like và Like
Các cách viết dưới đây, cách viết nào là đúng?
a Not Like b ?​
a Like Not b ?​
a Like Is Not b ?​

Câu trả lời là Not a Like b

2. Tìm kiếm chuỗi ký tự chứa một chuỗi ký tự khác (Like)

Hãy xem đoạn code ví dụ dưới đây:
Mã:
Sub LikeTest1()
    Dim s
    Dim ar()
    
    ReDim ar(4)
    ar(0) = "DaiHoc"
    ar(1) = "TruongHoc"
    ar(2) = "tuhocvba"
    ar(3) = "TieuHoc"
    ar(4) = "CongVien"
    
    For Each s In ar
        If s Like "*hoc*" Then
            Debug.Print s & " chua cum tu-hoc"
        Else
            Debug.Print s & " khong chua cum tu-hoc"
        End If
    Next
End Sub
Kết quả thực thi là:
DaiHoc khong chua cum tu-hoc
TruongHoc khong chua cum tu-hoc
tuhocvba chua cum tu-hoc
TieuHoc khong chua cum tu-hoc
CongVien khong chua cum tu-hoc
Nhìn vào kết quả trên có một chút vấn đề về chữ in hoa và chữ thường đã được chương trình tự động phân biệt. , có một cách rất đơn giản, trên đầu Module bạn hãy viết dòng code sau:
Mã:
Option Compare Text
Lúc này kết quả thực thi sẽ là:
DaiHoc chua cum tu-hoc
TruongHoc chua cum tu-hoc
tuhocvba chua cum tu-hoc
TieuHoc chua cum tu-hoc
CongVien khong chua cum tu-hoc
3. Tìm kiếm chuỗi ký tự không chứa chuỗi ký tự khác
Ta chỉ cần phủ định lại câu lệnh Like. Hãy xem ví dụ dưới đây:
Mã:
Option Compare Text
Sub LikeTest1()
    Dim s
    Dim ar()
    
    ReDim ar(4)
    ar(0) = "DaiHoc"
    ar(1) = "TruongHoc"
    ar(2) = "tuhocvba"
    ar(3) = "TieuHoc"
    ar(4) = "CongVien"
    
    For Each s In ar
        If Not s Like "*hoc*" Then
            Debug.Print s & " khong chua cum tu-hoc"
        Else
            Debug.Print s & " chua cum tu-hoc"
        End If
    Next
End Sub
Kết quả:
DaiHoc chua cum tu-hoc
TruongHoc chua cum tu-hoc
tuhocvba chua cum tu-hoc
TieuHoc chua cum tu-hoc
CongVien khong chua cum tu-hoc
Nguồn tham khảo:
 

NhanSu

SMod
Thành viên BQT
Để thử nghiệm nhanh toán tử LIKE, ta có thể xây dựng hàm tự tạo để test như sau
Mã:
Option Explicit
Option Compare Binary
Function IsLike(s1 As String, s2 As String, Optional CompText As Boolean = False) As Boolean
    If CompText Then
        s1 = UCase(s1)
        s2 = UCase(s2)
    End If
    IsLike = s1 Like s2
End Function
Điền các chuỗi cần test vào cột A, B. Tại cột C nhập công thức C1=islike(A1,B1) hoặc =islike(A1,B1,TRUE) để kiểm tra. Một số ký tự đại diện (wildcard) và mẫu (pattern) dùng với LIKE như sau:
PatternÝ nghĩaVí dụ
*một nhóm ký tự hoặc không có ký tự nào"a" LIKE "a*" = TRUE
?một ký tự"ab" LIKE "??"= TRUE, "ab" LIKE "?" = FALSE
#một chữ số từ 0 đến 9"123" LIKE "###" = TRUE
[charlist]một ký tự nằm trong danh sách"ab" LIKE "[abc][bc]" = TRUE
[!charlist]một ký tự không nằm trong danh sách"ab" LIKE "[abc][!bc]" = FALSE
Character range (vùng ký tự từ ký tự thứ nhất đến ký tự thứ 2, ví dụ [A-X] là ký tự nằm trong khoảng A đến X)một ký tự nằm trong hoặc không nằm trong vùng. Các vùng có thể nối tiếp nhau dạng [a-cm-n]"ab" LIKE "[a-z][a-b]"=TRUE
"A" LIKE "[!A-Z]" =FALSE
"m" LIKE "[a-cm-n]"=TRUE
"d" LIKE "[a-cm-n]"=FALSE
"x" LIKE "[!a-cm-n]"=TRUE
 
Top