Không có mã? Nhưng nó quá ngắn, dễ dàng và đẹp và ... :(
Mẫu RegEx của bạn [^A-Za-z0-9_-]
được sử dụng để xóa tất cả các ký tự đặc biệt trong tất cả các ô.
Sub RegExReplace()
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = "[^A-Za-z0-9_-]"
For Each objCell In ActiveSheet.UsedRange.Cells
objCell.Value = RegEx.Replace(objCell.Value, "")
Next
End Sub
Biên tập
Điều này gần đến mức tôi có thể nhận được câu hỏi ban đầu của bạn.
Mã thứ hai là một hàm do người dùng định nghĩa =RegExCheck(A1,"[^A-Za-z0-9_-]")
với 2 đối số. Đầu tiên là tế bào để kiểm tra. Cái thứ hai là mẫu RegEx để kiểm tra. Nếu mẫu khớp với bất kỳ ký tự nào trong ô của bạn, nó sẽ trả về 1 nếu không là 0.
Bạn có thể sử dụng nó giống như bất kỳ công thức Excel bình thường nào khác nếu lần đầu tiên bạn mở trình soạn thảo VBA bằng ALT+ F11, chèn một mô-đun mới (!) Và dán mã bên dưới.
Function RegExCheck(objCell As Range, strPattern As String)
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = strPattern
If RegEx.Replace(objCell.Value, "") = objCell.Value Then
RegExCheck = 0
Else
RegExCheck = 1
End If
End Function
Đối với người dùng mới sử dụng RegEx, tôi sẽ giải thích mô hình của bạn: [^A-Za-z0-9_-]
[] stands for a group of expressions
^ is a logical NOT
[^ ] Combine them to get a group of signs which should not be included
A-Z matches every character from A to Z (upper case)
a-z matches every character from a to z (lower case)
0-9 matches every digit
_ matches a _
- matches a - (This sign breaks your pattern if it's at the wrong position)