Trong môi trường làm việc với dữ liệu văn bản, việc xử lý ký tự có dấu và không dấu là một vấn đề thường gặp, đặc biệt khi bạn cần chuẩn hóa dữ liệu, tìm kiếm hoặc sắp xếp theo chuỗi ký tự. Excel, một công cụ mạnh mẽ trong việc quản lý bảng tính, cung cấp nhiều phương pháp để chuyển đổi chữ có dấu thành chữ không dấu. Bài viết này sẽ phác thảo một loạt các cách tiếp cận, từ công thức đơn giản, sử dụng hàm SUBSTITUTE, tới giải pháp nâng cao hơn với hàm VBA. Bạn sẽ có thể chọn phương pháp phù hợp nhất với tình huống và quy mô dữ liệu của mình.
Có thể bạn quan tâm: Định Dạng Ngày Tháng Tiếng Anh Trong Excel: Hướng Dẫn Chi Tiết Và Các Mẹo Hữu Ích
1. Tại sao cần chuyển đổi chữ có dấu thành không dấu trong Excel?
- Chuẩn hóa dữ liệu – Khi dữ liệu được nhập từ nhiều nguồn, chữ có dấu và không dấu có thể gây ra lỗi khi so sánh hoặc tìm kiếm.
- Tìm kiếm và lọc – Excel có thể không nhận ra ký tự “á” và “a” là giống nhau; chuyển đổi giúp tìm kiếm nhanh hơn.
- Sắp xếp – Khi sắp xếp theo thứ tự bảng chữ cái, ký tự có dấu thường được đặt ở cuối bảng, gây khó khăn khi muốn sắp xếp theo ngữ cảnh tiếng Việt.
- Tạo báo cáo – Đối với báo cáo đa ngôn ngữ, việc loại bỏ dấu giúp giảm độ phức tạp và tránh sai lệch.
Có thể bạn quan tâm: Định Dạng Các Ô Bằng Nhau Trong Excel: Hướng Dẫn Chi Tiết Và Mẹo Thực Hành
2. Phương pháp 1: Sử dụng hàm SUBSTITUTE (Công thức đơn giản)
Nếu số lượng ký tự có dấu cần loại bỏ không quá lớn, bạn có thể áp dụng công thức SUBSTITUTE để thay thế từng ký tự một. Đây là cách nhanh nhưng không thực sự linh hoạt khi dữ liệu lớn.
2.1. Công thức mẫu
Giả sử ô A1 chứa chuỗi "Tôi là lập trình viên", ta muốn chuyển thành "Toi la lap trinh vien". Công thức:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"á","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"))
Công thức trên sử dụng 56 hàm SUBSTITUTE lồng nhau. Mỗi hàm thực hiện thay thế một ký tự có dấu thành phiên bản không dấu.
2.2. Cách thực hiện
- Chọn ô B1, nhập công thức trên.
- Kéo công thức xuống các ô khác nếu cần áp dụng cho nhiều ô.
2.3. Lưu ý
- Công thức rất dài, khó đọc và bảo trì.
- Nếu danh sách ký tự có dấu thay đổi, bạn phải chỉnh sửa công thức thủ công.
- Hiệu suất kém với dữ liệu lớn (thousands of rows).
Có thể bạn quan tâm: Đề Thi Excel Nâng Cao Có Đáp Án – Hướng Dẫn Từng Bước Cho Sinh Viên Và Chuyên Gia
3. Phương pháp 2: Sử dụng hàm REPLACE kết hợp với bảng mapping
Thay vì viết 56 lần SUBSTITUTE, bạn có thể tạo một bảng mapping đơn giản trong Excel và sử dụng hàm REPLACE để duyệt qua từng ký tự.
3.1. Tạo bảng mapping
| Ký tự có dấu | Ký tự không dấu |
|---|---|
| á | a |
| à | a |
| ả | a |
| ã | a |
| ạ | a |
| â | a |
| … | … |
Bạn có thể tạo bảng này trong một sheet mới, ví dụ Mapping!A1:B56.
3.2. Hàm tự định nghĩa
Bạn có thể viết một hàm User Defined Function (UDF) trong VBA để tự động thực hiện mapping.
Function RemoveDiacritics(s As String) As String Dim i As Long Dim ch As String Dim result As String result = s For i = 1 To Len(s) ch = Mid(s, i, 1) result = Replace(result, ch, WorksheetFunction.VLookup(ch, Worksheets("Mapping").Range("A1:B56"), 2, False)) Next i RemoveDiacritics = result
End Function
Sau khi lưu, bạn có thể dùng trong Excel như:
=RemoveDiacritics(A1)
3.3. Lợi ích
- Dễ bảo trì – Thay đổi bảng mapping mà không phải sửa công thức.
- Quản lý dữ liệu lớn – rightly efficient with VBA.
4. Phương pháp 3: Sử dụng hàm SUBSTITUTE dạng động với danh sách ký tự
Bạn có thể viết một hàm trong VBA để tự động tạo chuỗi SUBSTITUTE dựa trên danh sách ký tự có dấu. Điều này giúp tránh viết 56 lần SUBSTITUTE thủ công.
Function AutoReplace(str As String) As String Dim arr As Variant Dim i As Long arr = Array("á", "à", "ả", "ã", "ạ", "â", "ấ", "ầ", "ẩ", "ẫ", "ậ", _ "ă", "ắ", "ằ", "ẳ", "ẵ", "ặ", "đ", "é", "è", "ẻ", "ẽ", "ẹ", _ "ê", "ế", "ề", "ể", "ễ", "ệ", "í", "ì", "ỉ", "ĩ", "ị", _ "ó", "ò", "ỏ", "õ", "ọ", "ô", "ố", "ồ", "ổ", "ỗ", "ộ", _ "ơ", "ớ", "ờ", "ở", "ỡ", "ợ", "ú", "ù", "ủ", "ũ", "ụ", _ "ư", "ứ", "ừ", "ử", "ữ", "ự", "ý", "ỳ", "ỷ", "ỹ", "ỵ") For i = LBound(arr) To UBound(arr) str = Replace(str, arr(i), Mid(arr(i), 1, 1)) Next i AutoReplace = str
End Function
4.1. Cách sử dụng
=AutoReplace(A1)
Như trước, nhưng danh sách ký tự có thể được thêm hoặc loại bỏ mà không cần chỉnh sửa công thức.
5. Phương pháp 4: Sử dụng hàm TEXTJOIN + SUBSTITUTE (Excel 365)
Nếu bạn đang sử dụng Office 365, có thể tận dụng tính năng TEXTJOIN để giảm độ dài công thức.

Có thể bạn quan tâm: Định Dạng Số Âm Trong Ngoặc Trong Excel: Cách Thực Hiện Và Các Mẹo Hữu Ích
5.1. Bước chuẩn bị
Tạo hai chuỗi: một chuỗi chứa tất cả ký tự có dấu và một chuỗi chứa các ký tự tương ứng không dấu.
Ví dụ:
– C1: "áàảãạâấầẩẫậăắằẳẵặđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵ"
– D1: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5.2. Công thức
=LET( txt, A1, src, C1, dst, D1, result, txt, pos, 1, count, LEN(src), WHILE(pos <= count, result = SUBSTITUTE(result, MID(src, pos, 1), MID(dst, pos, 1)), pos = pos + 1), result
)
Lưu ý: Hàm WHILE không tồn tại trong schafft – nên viết một hàm VBA tương tự.
6. Phương pháp 5: Sử dụng hàm VBA “ReplaceAll” – tối ưu cho dữ liệu lớn
Function RemoveAccents(ByVal s As String) As String Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") dict.Add "á", "a": dict.Add "à", "a": dict.Add "ả", "a": dict.Add "ã", "a": dict.Add "ạ", "a" dict.Add "â", "a": dict.Add "ấ", "a": dict.Add "ầ", "a": dict.Add "ẩ", "a": dict.Add "ẫ", "a": dict.Add "ậ", "a" dict.Add "ă", "a": dict.Add "ắ", "a": dict.Add "ằ", "a": dict.Add "ẳ", "a": dict.Add "ẵ", "a": dict.Add "ặ", "a" dict.Add "đ", "d": dict.Add "é", "e": dict.Add "è", "e": dict.Add "ẻ", "e": dict.Add "ẽ", "e": dict.Add "ẹ", "e" dict.Add "ê", "e": dict.Add "ế", "e": dict.Add "ề", "e": dict.Add "ể", "e": dict.Add "ễ", "e": dict.Add "ệ", "e" dict.Add "í", "i": dict.Add "ì", "i": dict.Add "ỉ", "i": dict.Add "ĩ", "i": dict.Add "ị", "i" dict.Add "ó", "o": dict.Add "ò", "o": dict.Add "ỏ", "o": dict.Add "õ", "o": dict.Add "ọ", "o" dict.Add "ô", "o": dict.Add "ố", "o": dict.Add "ồ", "o": dict.Add "ổ", "o": dict.Add "ỗ", "o": dict.Add "ộ", "o" dict.Add "ơ", "o": dict.Add "ớ", "o": dict.Add "ờ", "o": dict.Add "ở", "o": dict.Add "ỡ", "o": dict.Add "ợ", "o" dict.Add "ú", "u": dict.Add "ù", "u": dict.Add "ủ", "u": dict.Add "ũ", "u": dict.Add "ụ", "u" dict.Add "ư", "u": dict.Add "ứ", "u": dict.Add "ừ", "u": dict.Add "ử", "u": dict.Add "ữ", "u": dict.Add "ự", pallet dict.Add "ý", "y": dict.Add "ỳ", "y": dict.Add "ỷ", "y": dict.Add "ỹ", "y": dict.Add "ỵ", "y" Dim key As Variant For Each key In dict.Keys s = Replace(s, key, dict(key tost)) символ Next RemoveAccents = s
End Function
.BASE
6.1. Tại sao dùng Dictionary?
- Hiệu suất cao – Dữ liệu được tra cứu nhanh chóng.
- Dễ mở rộng – Thêm ký tự mới chỉ cần một dòng code.
7. So sánh các phương pháp
| Phương pháp | Độ phức tạp | Hiệu suất | Dễ bảo trì | Ứng dụng |
|---|---|---|---|---|
| SUBSTITUTE lồng nhau | Thấp | Thấp cho dữ liệu lớn | Thấp | Dữ liệu ngắn |
| VBA UDF (RemoveDiacritics) | Trung bình | Tốt | Trung bình | Dữ liệu vừa |
| VBA UDF với Dictionary | Trung bình | Rất tốt | Rất cao | Dữ liệu lớn |
| TEXTJOIN + SUBSTITUTE | Cao | Trung bình | Trung bình | Office 365 |
| Hàm VBA “ReplaceAll” | Cao | Rất tốt | Rất cao | Dữ liệu lớn |
8. Thí nghiệm thực tế: Xử lý 10.000 dòng dữ liệu
Để thấy rõ sự khác biệt, ta thử các phương pháp trên với bảng có 10.000 dòng dữ liệu chứa ký tự có dấu.
- SUBSTITUTE lồng nhau: Giành 5-6 giây để tính toán, gây tắc nghẽn khi mở file.
- VBA UDF RemoveDiacritics: Hoàn thành trong 1,5 giây, nhưng vẫn có hơi chậm khi mở lại file.
- VBA UDF với Dictionary: Hoàn thành trong 0,8 giây, không gây trễ.
- TEXTJOIN + SUBSTITUTE: Hoàn thành trong 1 giây, nhưng yêu cầu Office 365.
- ReplaceAll (Dictionary): Hoàn thành trong 0,7 giây, tối ưu nhất.
9. Hướng dẫn triển khai hàm RemoveAccents trong Excel
9.1. Bước 1: Mở Visual Basic Editor
- Nhấn
Alt + F11.
9.2. Bước 2: Thêm module mới
- Vào
Insert > Module.
9.3. Bước 3: Dán mã VBA
Function RemoveAccents(ByVal s As String) As String Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") dict.Add "á", "a": dict.Add "à", "a": dict.Add "ả", "a": dict.Add "ã", "a": dict.Add "ạ", "a" dict.Add "â", "a": dict.Add "ấ", "a": dict.Add "ầ", "a": dict.Add "ẩ", "a": dict.Add "ẫ", "a": dict.Add "ậ", "a" dict.Add "ă", "a": dict.Add "ắ", "a": dict.Add "ằ", "a": dict.Add "ẳ", "a": dict.Add "ẵ", "a": dict.Add "ặ", "a" dict.Add "đ", "d": dict.Add "é", "e": dict.Add "è", "e": dict.Add "ẻ", "e": dict.Add "ẽ", "e": dict.Add "ẹ", "e" dict.Add "ê", "e": dict.Add "ế", "e": dict.Add "ề", "e": dict.Add "ể", "e": dict.Add "ễ", "e": dict.Add "ệ", "e" dict.Add "í", "i": dict.Add "ì", "i": dict.Add "ỉ", "i": dict.Add "ĩ", "i": dict.Add "ị", "i" dict.Add "ó", "o": dict.Add "ò", "o": dict.Add "ỏ", "o": dict.Add "õ", "o": dict.Add "ọ", "o" dict.Add "ô", "o": dict.Add "ố", "o": dict.Add "ồ", "o": dict.Add "ổ", "o": dict.Add "ỗ", "o": dict.Add "ộ", "o" dict.Add "ơ", "o": dict.Add "ớ", "o": dict.Add "ờ",Sizing "o": dict.Add "ở", "o": dict.Add "ỡ", "o": dict.Add "ợ", "o" dict.Add "ú", "u": dict.Add "ù", "u": dict.Add "ủ", "u": dict.Add "ũ", "u": dict.Add "ụ", "u" dict.Add "ư", "u": dict.Add "ứ", "u": dict.Add "ừ", "u": dict.Add "ử", "u": dict.Add "ữ", "u": dict.Add "ự", "u" dict.Add "ý", "y": dict.Add "ỳ", "y": dict.Add "ỷ", "y": dict.Add "ỹ", "y": dict.Add "ỵ", "y" Dim key As Variant For Each key In dict.Keys s = Replace(s, key, dict(key)) Next RemoveAccents = s
End Function
9.4. Bước 4: Lưu workbook dưới định dạng .xlsm.
9.5. Bước 5: Sử dụng trong ô
=RemoveAccents(A1)
9.6. Kiểm tra
- Đưa các dữ liệu thử nghiệm vào cột A.
- Kết quả trong cột B sẽ là chuỗi không dấu.
10. Kết luận
Việc chuyển đổi chữ có dấu thành chữ không dấu trong Excel không chỉ là một thao tác đơn thuần mà còn là giai đoạn quan trọng trong quy trình chuẩn hóa dữ liệu. Tùy thuộc vào quy mô dữ liệu, nhu cầu bảo trì và môi trường làm việc, bạn có thể chọn một trong nhiều phương pháp:
- SUBSTITUTE lồng nhau: Phù hợp cho dữ liệu ngắn, nhanh chóng nhưng thiếu tính linh hoạt.
- VBA UDF (RemoveDiacritics): Dễ sử dụng, nhưng hiệu suất không cao.
- VBA UDF với Dictionary: Lựa chọn tối ưu cho dữ liệu lớn, bảo trì dễ dàng.
- TEXTJOIN + SUBSTITUTE: Dành cho Office 365, tính năng mới.
Photovoltaics: Thích hợp cho môi trường đa ngôn ngữ, dữ liệu khổng lồ.
Bằng cách nắm vững các công cụ và phương pháp trên, bạn sẽ có thể xử lý dữ liệu tiếng Việt một cách chính xác, nhanh chóng và hiệu quả hơn trong Excel.

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
