Chào các anh chị em trong diễn đàn!
Hôm nay mình muốn chia sẻ một chút kinh nghiệm nhỏ mà mình vừa tìm ra để xử lý vấn đề khá phổ biến khi làm việc với dữ liệu tiếng Việt trong Excel, đó là làm sao để so sánh hoặc tìm kiếm chuỗi ký tự có dấu và không dấu một cách hiệu quả.
Tình huống là mình có một danh sách tên, trong đó có cả tên có dấu và không dấu. Khi cần lọc hoặc đối chiếu, việc này gây ra không ít khó khăn. Tìm kiếm thủ công thì mất thời gian, mà dùng các hàm tìm kiếm thông thường thì lại không xử lý được sự khác biệt về dấu.
Sau một hồi mày mò, mình đã tìm ra một cách khá hay ho mà không cần cài thêm add-in gì cả. Ý tưởng chính là chuyển tất cả các chuỗi về cùng một dạng (hoặc có dấu hoặc không dấu) trước khi so sánh.
Cách làm của mình như sau:
- Bước 1: Tạo một cột phụ.
- Bước 2: Sử dụng hàm
UNICHARkết hợp với một số hàm xử lý chuỗi khác để loại bỏ dấu. Tuy nhiên, cách này hơi phức tạp và không phải lúc nào cũng chính xác 100% với mọi trường hợp dấu tiếng Việt. - Bước 3 (Cách mình thấy ổn nhất): Sử dụng VBA. Nếu anh em nào quen với VBA thì có thể viết một function đơn giản để chuyển đổi chuỗi có dấu thành không dấu hoặc ngược lại.
- Bước 4 (Cách mình hay dùng): Sử dụng kết hợp
SUBSTITUTEvàIFlồng nhau để thay thế lần lượt các nguyên âm có dấu thành nguyên âm không dấu. Tuy hơi dài nhưng khá hiệu quả và dễ hiểu. Ví dụ, để chuyển "Nguyễn Văn A" thành "Nguyen Van A", ta có thể làm như sau cho ô B1 (giả sử A1 là "Nguyễn Văn A"):=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"à","a"),"á","a"),"ạ","a"),"ả","a"),"ã","a"),"ă","a"),"ằ","a"),"ắ","a"),"ặ","a"),"ẳ","a"),"ẵ","a") ... (tiếp tục với các nguyên âm có dấu khác)
Sau khi đã có cột phụ chuyển đổi, anh em chỉ cần dùng các hàm như VLOOKUP, INDEX-MATCH, COUNTIF... để so sánh hoặc tìm kiếm dựa trên cột phụ này. Đảm bảo kết quả sẽ chính xác dù dữ liệu gốc có dấu hay không dấu.
Hy vọng chia sẻ nhỏ này giúp ích được cho mọi người. Nếu ai có cách nào hay hơn, xin chỉ giáo thêm ạ!