[Tool Ex Test]Replace "*"

tuhocvba

Administrator
Thành viên BQT
Chúng ta có bài toán như sau:
Bạn cần đăng nhập để thấy hình ảnh

Chúng ta mong muốn replace ký tự "*" chuyển thành "_" và chúng ta thực hiện bằng lệnh Ctr+H
Bạn cần đăng nhập để thấy hình ảnh


Excel hiểu "*" là ký tự bất kỳ và chúng ta thu được kết quả như sau:
Bạn cần đăng nhập để thấy hình ảnh


Đây là bài toán chúng ta cần giải quyết. Kết quả mà chúng ta mong muốn là:
Mã:
____abcdas____4
Chúng ta thay vì nhập "*", chúng ta nhập "~*" :
Bạn cần đăng nhập để thấy hình ảnh


Kết quả là:
Bạn cần đăng nhập để thấy hình ảnh


Kết luận:
Nếu tìm và thay thế ký tự ? thì nhập ~?. Nếu tìm và thay thế ký tự ~ thì nhập ~~. Nếu tìm và thay thế ký tự đại diện ~, ? hoặc * thì thêm vào trước chúng ký tự ~
 

tuhocvba

Administrator
Thành viên BQT
Hôm nay tôi viết bài nói về lệnh Replace trong VBA.
Replace(s,find,replace [,start[,count[,compare]]])
Trong đó:
  • s là ký tự nguồn.
  • find là ký tự tìm kiếm trong s
  • replace :Nếu tìm thấy find trong s thì thay thế bằng replace
  • start:Vị trí bắt đầu tìm kiếm
  • count: Số lần thay thế
  • compare: Chế độ so sánh.
Về chế độ so sánh (compare), chúng ta có ba chế độ:
  • vbBinaryCompare = 0 : Phân biệt in hoa, in thường.
  • vbTextCompare = 1 : Không phân biệt in hoa in thường.
  • vbDatabaseCompare = 2 : Chỉ dùng trong Microsoft Access nên chúng ta tạm thời không quan tâm.

Tôi thường sử dụng chế độ vbTextCompare (Không phân biệt in thường hay in hoa).
Nếu như đúng ý đồ tìm kiếm thông thường, thì hoặc bỏ trống tham số start (mặc định là 1 khi bỏ trống), hoặc điền là 1.
Ví dụ:
Input: s = "0a1a2"
Output: s = "0b1b2"
Mã:
s = Replace(s, "a", "b", 1, , vbTextCompare)
Thay đổi code trên là:
Mã:
s = Replace(s, "a", "b", 2, , vbTextCompare)
Vị trí bắt đầu tìm kiếm đã bị sửa là 2. Bây giờ cùng kiểm tra kết quả:
Input: s = "0a1a2"
Output: s = "b1b2"
Như vậy phần văn bản trước vị trí bắt đầu tìm kiếm đã bị "gọt" đi. Chúng ta cần lưu ý điều này.

Liên quan tới chế độ so sánh (so sánh string có quan tâm in hoa hay in thường hay không) có vài điều chia sẻ với các bạn như sau:
Trong code VBA, nếu muốn chương trình không phân biệt in hoa và in thường trong các lệnh so sánh string, hoặc chúng ta dùng:
Mã:
If Ucase(s1) = Ucase(s2) then
Hoặc:
Mã:
If Lcase(s1) = Lcase(s2) then
Hoặc: Ở đầu Module các bạn khai báo:
Mã:
Option Compare Text 'Hoặc: Option Compare Binary
Tham khảo:
 
Top