So sánh chuỗi, tìm chuỗi gần đúng trong Excel

Bài này, mình chọn làm bài đầu tiên trong Series VBA đã cứu tôi như thế nào – How did VBA save my ass? Các bạn nghĩ có thể không có gì to tát cả, nhưng vào năm 3 đại học, với công việc thực tập trong 1 tập đoàn tầm cỡ quốc tế và làm việc trong bộ phận CIO Advisory thì vượt qua từng ngày làm việc trong suốt 6 tháng là cả 1 kì tích. Không phải vì mình dốt, không phải vì mình không làm được việc. Mình dốt 1 cách bình thường, cái khó ở đây là lượng công việc rất lớn và áp lực để hoàn thành công việc đó cũng quá lớn. Mình sẽ không dài dòng kể về thời đó nữa vì sẽ làm chán các bạn.

Chúng ta có 1 nhiệm vụ đơn giản: có 2 cột gồm tên của các công ty, một cột gồm có 2000 công ty, một cột gồm có 8000 công ty, làm thế nào để biết được trong 2000 công ty này thì công ty nào đã ở trong số 8000 công ty bên cột kia, tên của các công ty không trùng khớp 100%, đôi khi thiếu 1 vài chữ, thừa 1 vài chữ, 1 vài chữ không chính xác. Các hàm dò tìm và tìm kiếm sẽ không giúp được gì cho các bạn trong trường hợp này. Các bạn có 2 tiếng để đưa ra kết quả, làm thuyết trình và báo cáo.

Lúc đó, mình suy nghĩ thế này: bắt đầu từ dữ kiện, tên các công ty chỉ gần giống nhau chữ không giống nhau hoàn toàn, chắc hẳn phải có 1 chỉ số nào đó cho sự giống nhau giữa 2 chuỗi. Chìa khoá là đây, từ khoá là kia, thực ra vấn đề này không mới, có 1 vài anh zai đã nghiên cứu trước rồi, và phương pháp hay tên của các thuật toán được lấy theo tên các anh. Một vài anh tiêu biểu là Lehvenstein, Jaccard (đọc như Gia Cát vậy =)) ), Jaro-Winkler và Longest common subsequence. Tới đây thì mình chọn anh Lehvenstein vì đẹp trai. Sau đó biết được thuật toán rồi, thì code VBA như sau để tạo ra được 1 cái UDF có chức năng như sau:

  1. Đánh giá sự giống nhau giữa 2 đoạn Text
  2. Trả về tên giống nhất
  3. Trả về số thứ tự của tên giống nhất
  4. Trả về % giống nhau giữa 2 cái tên

Các bạn tham khảo code trong file Excel sau đây:

https://drive.google.com/open?id=14J8Zgqj5B7NovcZjxpZrj-33WI87Oe1Y

Cách sử dụng và hình minh hoạ như sau:

Hình 1

ten-gan-giong-nhau-vba-01

Hình 2

ten-gan-giong-nhau-vba-02

Kết quả là, tìm kiếm và thực hiện giải quyết vấn đề trong vòng 45 phút, code chạy mất 45 phút, làm thuyết trình báo cáo mất 15 phút, uống Cafe mất 5 phút, mình còn 10 phút để chuẩn bị vào báo cáo và kết quả là mọi chuyện đã diễn ra tốt đẹp.

Từ lúc đó đến nay là 5 năm rồi, chắc hẳn có nhiều phương pháp khác nhanh hơn và hiện đại hơn sử dụng Fuzzy Search / Matching với các loại Database Engine nhưng vào thời điểm đó, kiếm của mình chỉ là Excel và VBA. Kiếm của mình đã cứu mình như thế.

Khám phá những tính năng thần thánh của VBA tại khoá học VBA101 – VBA cơ bản dành cho người mới bắt đầu nhé. Thông tin chi tiết về khóa học, bạn vui lòng xem tại đường link: https://hocexcel.online/course/preview/vba101-tu-dong-hoa-excel-voi-lap-trinh-vba-cho-nguoi-moi-bat-dau


Tác giả: dtnguyen (Nguyễn Đức Thanh)

@ Học Excel Online | DTNguyen.business
· · ·

Khóa học mới xuất bản