Nhattanktnn
Thành viên gắn bó
Chào các anh chị,
Em đang viết một UDF có tên RemoveChars, Cú pháp dạng RemoveChars(Chuỗi,Ký tự cần xóa1, Ký tự cần xóa 2,...)
Chức năng của nó là xóa các ký tự không mong muốn trong một chuỗi.
Ví dụ A1 là chuỗi WE2-705 203 172, khi sử dụng hàm =RemoveChars(A1," ") sẽ xóa khoảng trắng còn WE2-705203172.
Đến đó em vẫn chưa hài lòng với kết quả vì muốn xóa thêm phần WE2-, một số ô khác nó lại là CO2- ...
Nên ý nghĩ là xóa theo ký tự đặc biệt, tức xóa phần trước dấu "-".
Em điều chỉnh UDF, =RemoveChars(A1,"*-"," ") => Kết quả là 705203172 (Như mong muốn)
Nhưng câu hỏi là:
Em muốn lập một hàm tổng quát chuyên xử lý dữ liệu kiểu này, ParramArray có cho phép sử dụng ký tự đặc biệt.
Ký tự đặc biệt trong excel có 3 loại, "*", "?", "~" . Với 3 loại này nó xảy ra quá nhiều trường hợp mà em không kiểm soát hết được, chưa kể đến trường hợp chuỗi mục tiêu chứa luôn cả các loại này, kiểu 705***203***172
Vậy anh chị có thuật toán nào hay hoặc link nào thì gửi cho em tham khảo với!
Em đã code được nhiêu đây với dấu hoa thị "*" đủ để sử dụng trong bài toán của em. Còn em muốn chuyển thành tổng quát thì thực sự quá phức tạp
Em đang viết một UDF có tên RemoveChars, Cú pháp dạng RemoveChars(Chuỗi,Ký tự cần xóa1, Ký tự cần xóa 2,...)
Chức năng của nó là xóa các ký tự không mong muốn trong một chuỗi.
Ví dụ A1 là chuỗi WE2-705 203 172, khi sử dụng hàm =RemoveChars(A1," ") sẽ xóa khoảng trắng còn WE2-705203172.
Đến đó em vẫn chưa hài lòng với kết quả vì muốn xóa thêm phần WE2-, một số ô khác nó lại là CO2- ...
Nên ý nghĩ là xóa theo ký tự đặc biệt, tức xóa phần trước dấu "-".
Em điều chỉnh UDF, =RemoveChars(A1,"*-"," ") => Kết quả là 705203172 (Như mong muốn)
Nhưng câu hỏi là:
Em muốn lập một hàm tổng quát chuyên xử lý dữ liệu kiểu này, ParramArray có cho phép sử dụng ký tự đặc biệt.
Ký tự đặc biệt trong excel có 3 loại, "*", "?", "~" . Với 3 loại này nó xảy ra quá nhiều trường hợp mà em không kiểm soát hết được, chưa kể đến trường hợp chuỗi mục tiêu chứa luôn cả các loại này, kiểu 705***203***172
Vậy anh chị có thuật toán nào hay hoặc link nào thì gửi cho em tham khảo với!
Em đã code được nhiêu đây với dấu hoa thị "*" đủ để sử dụng trong bài toán của em. Còn em muốn chuyển thành tổng quát thì thực sự quá phức tạp
Mã:
Option Explicit
'Xóa ky tu trong chuoi, khong phan biet hoa thuong
Public Function RemoveChars(str As String, ParamArray CharArray() As Variant) As String
Dim iChar As Variant
Dim Txt As String, Tmp As String
Dim M As Long, AstPos As Long
Txt = str
For Each iChar In CharArray
AstPos = InStr(iChar, "*")
If AstPos Then
Tmp = Replace(iChar, "*", "")
M = InStr(1, Txt, Tmp, 1)
If M Then
If AstPos = 1 Then
iChar = Mid(Txt, 1, M + Len(Tmp) - 1)
ElseIf AstPos = Len(iChar) Then
M = InStr(1, Txt, Tmp, 1)
iChar = Mid(Txt, M, Len(Txt))
End If
Else
iChar = ""
End If
Else
Tmp = iChar
M = InStr(1, Txt, Tmp, 1)
If M <= 0 Then
iChar = ""
End If
End If
Txt = Replace(Txt, iChar, "", , , 1)
Next
RemoveChars = Txt
End Function