Hàm Replace, hàm Clean-để xóa dấu cách và dấu xuống dòng

Trong xử lý văn bản, nếu không xử lý tốt các ký hiệu đặc biệt, khi so sánh string1 với string2 có thể dẫn tới kết quả không như mong muốn.
Ở bài viết này, tôi sẽ giới thiệu mọi người cách để xóa dấu cách và dấu xuống dòng trong văn bản.

Chúng ta có 3 cách: Dùng hàm Replace, dùng phương thức Replace, dùng hàm Clean.
Lưu ý : Hàm Clean chỉ xóa dấu xuống dòng.

1. Cách sử dụng hàm Replace để xóa dấu xuống dòng và dấu cách
Cấu trúc:

Mã:
Replace(expression,find,replace[,start[,count[,compare]]])
Một cách đơn giản có thể diễn giải như sau:
Replace(Chuỗi_Ký_Tự,Ký_Tự_Tìm_Kiếm,Ký_Tự_Thay_Thế[,Vị_Trí_Bắt_Đầu[,Số_Lần_Thay_Thế],Phương_Pháp_So_Sánh]]])

Xóa dấu cách và dấu xuống dòng
Hãy xem ví dụ dưới đây:
1.1 Xóa dấu cách:
Compare:=vbTextCompare」không phân biệt chữ hoa và chữ thường.
Mã:
Sub Sample1()

Dim MyStr As String

MyStr = "t u h o c v b a . n e t"

MyStr = Replace(MyStr, " ", "", Compare:=vbTextCompare)

MsgBox MyStr

End Sub
Nếu như vẫn muốn phân biệt chữ hoa và chữ thường nhưng không muốn chỉ định Compare thì có thể làm như sau:
Mã:
Sub Sample2()

Dim MyStr As String

MyStr = "t u h o c v b a . n e t"

MyStr = Replace(Replace(MyStr, " ", ""), " ", "")

MsgBox MyStr

End Sub
1.2 Xóa dấu xuống dòng
Ta sẽ thay thế 「vbCrLf 」bằng「””」
Mã:
Sub Sample3()

Dim MyStr As String

MyStr = "E" & vbCrLf & "M" & vbCrLf & "Y" & vbCrLf & "E" & vbCrLf & "U" & vbCrLf & "THVBA"

MyStr = Replace(MyStr, vbCrLf, "")

MsgBox MyStr

End Sub
2. Dùng phương thức Replace để xóa dấu cách và dấu xuống dòng
Tính năng Replace của Excel nhìn chung giống hàm Replace trong VBA.
Nếu như không tìm thấy để thay thế sẽ có lỗi xảy ra, do đó chúng ta cần xử lý khéo léo chỗ này.
Phương thức này sẽ tìm kiếm và thay thế trong một phạm vi do người dùng chỉ định.
Phương thức Replace trong Excel khi được thiết định điều kiện tìm kiếm và thay thế, nó sẽ được lưu trong Excel.
Cấu trúc:
Mã:
Range.Replace(what、replacement、LookAt、searchorder、matchcase、matchByte、searchorder、replaceformat)
Hãy xem ví dụ dưới đây:
2.1 Xóa dấu cách
「matchcase」 nếu chỉ định là False, thì sẽ không phân biệt chữ hoa và chữ thường.
Mã:
Sub Sample4()

Range("A1:A10").Replace What:=" ", Replacement:="", LookAt:=xlPart, MatchCase:=False

End Sub
2.2 Xóa dấu xuống dòng
Ta sẽ thay thế 「vbCrLf 」bằng「””」
Mã:
Sub Sample5()

Range("A1:A10").Replace What:=vbCrLf, Replacement:="", LookAt:=xlPart, MatchCase:=False

End Sub
3. Sử dụng hàm Clean để xóa dấu xuống dòng
Cấu trúc:

Mã:
WorksheetFunction.Clean(str)
Mã:
Sub Sample6()

Dim MyStr As String

MyStr = "E" & vbCrLf & "M" & vbCrLf & "Y" & vbCrLf & "E" & vbCrLf & "U" & vbCrLf & "THVBA"

MyStr = WorksheetFunction.Clean(MyStr)

MsgBox MyStr

End Sub
Nguồn tham khảo :
 
T

thanhphong

Guest
@Yukino Ichikawa trong một ô Excel, khi ta bấm Alt Enter để xuống dòng thì ký tự xuống dòng đó có mã ASCII là 10 (vbLf) còn ký tự vbCr và vbCrLf có mã 13. Khi xóa ta cần thay thế các ký tự này.
Đúng rồi đó bác.
Trước khi xử lý ký tự cần có bước chuẩn hóa:
Mã:
s = Replace(s, Chr(13), Chr(10), , , vbTextCompare)
Thay thế hết chr(13) thành chr(10) cho dễ làm việc. Hoặc ngược lại.
Topic liên quan:
 

NhanSu

SMod
Thành viên BQT
Mình thường thay thế các ký tự 10 và 13 với khoảng trắng rồi dùng Application.Trim để xóa khoảng trắng thừa.
Nếu sử dụng Clean thì có thể xảy ra trường hợp các từ bị dính liền tạo ra output không mong muốn. Ví dụ chuỗi ban đầu là "a" & Chr(10) & "b", nếu sử dụng thay thế sẽ được
"a b", nếu dùng Clean thành "ab". Tùy theo mong muốn mà ta chọn cách phù hợp.
 
Top