Hỏi về Replace trong VBA ? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Các bạn cho mình hỏi: sự khác nhau giữa 2 câu lệnh này trong VBA ?
Tôi Test thì cho kết quả như sau:

Selection.Replace "* ", "" cho kết quả là 1 chuỗi con cuối cùng trong chuỗi gốc (đã xóa tất cả các ký tự đứng trước chuối cuối).

Replace(Selection, "* ", "") cho kết quả vẫn là 1 chuỗi lớn (tại sao vẫn y nguyên như chuỗi gốc).
 
Các bạn cho mình hỏi: sự khác nhau giữa 2 câu lệnh này trong VBA ?
Tôi Test thì cho kết quả như sau:

Selection.Replace "* ", "" cho kết quả là 1 chuỗi con cuối cùng trong chuỗi gốc (đã xóa tất cả các ký tự đứng trước chuối cuối).

Replace(Selection, "* ", "") cho kết quả vẫn là 1 chuỗi lớn (tại sao vẫn y nguyên như chuỗi gốc).

Hình như 2 cái này khác nhau mà anh.
1. Object.Replace >>> Cái này là phương thức
2. Variant = Replace(Chuỗi, "abc", "def") >>> Cái này là hàm của VBA


Mã:
Sub test1()
[A1].Value = "abcabcabc"
[A1].Replace "b", ""
MsgBox [A1]
End Sub
Mã:
Sub test2()
Dim chuoi
chuoi = "abcabcabc"
chuoi = Replace(chuoi, "b", "")
MsgBox chuoi
End Sub

PS: Nếu không đúng thì các anh chị khác giải thích lại nhé
 
Upvote 0
Hình như hàm Relace của VBA nó không chấp nhận ký tự đại diện "*"
 
Upvote 0
Hình như hàm Relace của VBA nó không chấp nhận ký tự đại diện "*"

Nếu để xử lý chuỗi em nghĩ anh nên xài Regexp hay hơn nhiều
Anh xem qua code này xem
Mã:
Sub thaythe()
Dim kq, chuoi
chuoi = "abcabcabc"
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "b.*"
   kq = .Replace(chuoi, "")
   MsgBox kq
End With
End Sub
 
Upvote 0
Nếu để xử lý chuỗi em nghĩ anh nên xài Regexp hay hơn nhiều
Anh xem qua code này xem
Mã:
Sub thaythe()
Dim kq, chuoi
chuoi = "abcabcabc"
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "b.*"
   kq = .Replace(chuoi, "")
   MsgBox kq
End With
End Sub

Mình chưa biết sử dụng món này. QuangHai viết lại với ví dụ sau để mình nghiên cứu. Thanks!
Mã:
Sub test()
tmp = "Phan Duc Chinh"
MsgBox Split(tmp, " ")(UBound(Split(tmp, " ")))
End Sub
 
Upvote 0
Mình chưa biết sử dụng món này. QuangHai viết lại với ví dụ sau để mình nghiên cứu. Thanks!
Mã:
Sub test()
tmp = "Phan Duc Chinh"
MsgBox Split(tmp, " ")(UBound(Split(tmp, " ")))
End Sub
Có phải thế này không anh?
Mã:
Sub test()
Dim tmp As String
tmp = "Phan Duc Chinh"
With CreateObject("vbscript.regexp") 
    .Pattern = ".* "
MsgBox .Replace(tmp, "")
End With
End Sub
 
Upvote 0
File dữ liệu em xuất ra có cột ngày/tháng/năm nhưng lại có 1 khoảng trắng ở đầu, ví dụ:" 01/10/2015" em muốn xoá khoảng trắng đó trong cột này, nếu dùng Replace bằng Ctrl+H thì thứ tự ngày/tháng/năm không thay đổi, nhưng Record Macro ra đoạn code dưới đây, nếu em chạy đoạn code này thì những ngày <=12 sẽ bị hiểu thành tháng, và thứ tự thay đổi. Mong mọi người chỉ em cách Replace bằng VBA mà không bị thay đổi thứ tự ngày, tháng. Em cảm ơn nhiêù ạ.
Code khi Record Macro:

Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
 
Lần chỉnh sửa cuối:
Upvote 0
File dữ liệu em xuất ra có cột ngày/tháng/năm nhưng lại có 1 khoảng trắng ở đầu, ví dụ:" 01/10/2015" em muốn xoá khoảng trắng đó trong cột này, nếu dùng Replace bằng Ctrl+H thì thứ tự ngày/tháng/năm không thay đổi, nhưng Record Macro ra đoạn code dưới đây, nếu em chạy đoạn code này thì những ngày <=12 sẽ bị hiểu thành tháng, và thứ tự thay đổi. Mong mọi người chỉ em cách Replace bằng VBA mà không bị thay đổi thứ tự ngày, tháng. Em cảm ơn nhiêù ạ.
Code khi Record Macro:
Bạn thử gửi File xem sao. Có thể rút gọn code thành:
Mã:
Selection.Replace " ", "", xlPart
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom