VBA Excel Xây dựng hàm chuyển chuỗi có dấu thành không dấu, khoản trắng thành dấu –
Giaoan.link chia sẻ đến các bạn một hàm trên VBA Excel dùng để chuyển chuỗi có dấu thành không dấu, khoản trắng thành dấu – . Ví dụ, bạn có chuỗi Huỳnh Minh Trung, khi áp dụng hàm sẽ chuyển thành “HUYNH-MINH-TRUNG”. Mục đích dùng trong các trường hợp cần bỏ dấu tiếng việt và không có khonar trắng như đặt tên file, folder…
Dưới đây là video demo và code vba, bạn sử dụng trong project
Function bodauvakhoantrang(ByVal sIn As String) As String
Dim i As Long, j As Long
Dim combCodes As Variant
Dim findCodes As Variant
Dim replaceChars As Variant
Dim invalidChars As Variant
' 0) Chuy?n m?t s? ch? hoa d?c bi?t v? ch? thu?ng
sIn = Replace(sIn, ChrW(&H110), ChrW(&H111)) ' Ð ? d
sIn = Replace(sIn, ChrW(&HC2), ChrW(&HE2)) ' Â ? â
sIn = Replace(sIn, ChrW(&HCA), ChrW(&HEA)) ' Ê ? ê
sIn = Replace(sIn, ChrW(&H102), ChrW(&H103)) ' A ? a
sIn = Replace(sIn, ChrW(&HD4), ChrW(&HF4)) ' Ô ? ô
sIn = Replace(sIn, ChrW(&H1A0), ChrW(&H1A1)) ' O ? o
sIn = Replace(sIn, ChrW(&H1AF), ChrW(&H1B0)) ' U ? u
' 1) Lo?i b? các d?u t? h?p Unicode
combCodes = Array(&H300, &H301, &H302, &H303, &H306, &H309, &H31B, &H323)
For j = LBound(combCodes) To UBound(combCodes)
sIn = Replace(sIn, ChrW(combCodes(j)), "")
Next j
' 2) Danh sách ký t? có d?u (c? ch? thu?ng và ch? hoa)
findCodes = Array( _
&HE0, &HE1, &H1EA3, &HE3, &H1EA1, _
&HE2, &H1EA7, &H1EA5, &H1EA9, &H1EAB, &H1EAD, _
&H103, &H1EAF, &H1EB1, &H1EB3, &H1EB5, &H1EB7, _
&H111, _
&HE8, &HE9, &H1EC7, &HEB, &H1EBB, _
&HEA, &H1EC1, &H1EBF, &H1EC3, &H1EC5, &H1EC7, _
&HEC, &HED, &H1EC9, &H129, &H1ECB, _
&HF2, &HF3, &H1ECF, &HF5, &H1ECD, _
&HF4, &H1ED3, &H1ED1, &H1ED5, &H1ED7, &H1ED9, _
&H1A1, &H1EDD, &H1EDB, &H1EDF, &H1EE1, &H1EE3, _
&HF9, &HFA, &H1EE7, &H169, &H1EE5, _
&H1B0, &H1EEB, &H1EE9, &H1EED, &H1EEF, &H1EF1, _
&H1EF3, &HFD, &H1EF7, &H1EF9, &H1EF5, _
&H1EA6, &H1EA4, &H1EA8, &H1EAA, &H1EAC, &H1EA2, &H1EAE, &H1EB0, &H1EB2, &H1EB4, &H1EB6, _
&H1EB8, &H1EBA, &H1EBC, &H1EBE, &H1EC0, &H1EC2, &H1EC4, &H1EC6, _
&H1EC8, &H1ECA, &H1ECC, &H1ECE, &H1ED0, &H1ED2, &H1ED4, &H1ED6, &H1ED8, _
&H1EDA, &H1EDC, &H1EDE, &H1EE0, &H1EE2, _
&H1EE6, &H1EE4, &H1EE8, &H1EEA, &H1EEC, &H1EEE, &H1EF0, _
&H1EF2, &H1EF4, &H1EF6, &H1EF8 _
)
replaceChars = Array( _
"a", "a", "a", "a", "a", _
"a", "a", "a", "a", "a", "a", _
"a", "a", "a", "a", "a", "a", _
"d", _
"e", "e", "e", "e", "e", _
"e", "e", "e", "e", "e", "e", _
"i", "i", "i", "i", "i", _
"o", "o", "o", "o", "o", _
"o", "o", "o", "o", "o", "o", _
"o", "o", "o", "o", "o", "o", _
"u", "u", "u", "u", "u", _
"u", "u", "u", "u", "u", "u", _
"y", "y", "y", "y", "y", _
"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", _
"e", "e", "e", "e", "e", "e", "e", "e", _
"i", "i", "o", "o", "o", "o", "o", "o", "o", _
"o", "o", "o", "o", "o", _
"u", "u", "u", "u", "u", "u", "u", _
"y", "y", "y", "y" _
)
' 3) Thay th? các ký t? có d?u
For j = LBound(findCodes) To UBound(findCodes)
sIn = Replace(sIn, ChrW(findCodes(j)), replaceChars(j))
Next j
' 4) Chuy?n thành ch? hoa
sIn = UCase(sIn)
' 5) Thay kho?ng tr?ng b?ng d?u g?ch ngang
sIn = Replace(sIn, " ", "-")
' 6) Lo?i b? ký t? d?c bi?t không h?p l?
invalidChars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
For i = LBound(invalidChars) To UBound(invalidChars)
sIn = Replace(sIn, invalidChars(i), "")
Next i
bodauvakhoantrang = sIn
End Function