Nghĩ ra 1 hướng nhưng chưa thử: (với điều kiện dữ liệu đúng chuẩn database)
1. Khi mở file: Copy sheet sang 1 sheet tmp (với n dòng dữ liệu không kể tiêu đề)
2. Chỉnh sửa búa xua.
3. Khi nhấn nút:
- Tạo 1 biến mảng Arr1 n dòng 1 cột.
- Dùng vòng lặp với biến i duyệt qua tất cả các dòng của sheet tmp (không kể dòng tiêu đề)
- Dùng vòng lặp qua tất cả các cột của Database sheet tmp, và dùng toán tử nối chuỗi nối tất cả các cột trên cùng dòng i, gán kết quả vào phần tử (i, 1)
- Quay lại sheet chính, cũng dùng phép nối chuỗi, nối tất cả các cột trên cùng dòng thành 1 phần tử của biến mảng Arr2.
- Kết quả ta có 2 mảng 1 cột: Arr1 n dòng và Arr2 m dòng. (n >= m)
- Dò tìm từng phần tử của Arr2 trong Arr1, nếu tìm thấy, tức là chưa chỉnh sửa, và xoá. Nếu không tìm thấy, thì bỏ qua.
- Do có xoá dòng, nên phải dò tìm Arr2 ngược từ dưới lên.
Như vậy, nếu sửa dù chỉ 1 ký tự cũng được xem là có chỉnh sửa, và để lại.
Nguyên tắc là phải có cái ban đầu để so sánh với cái sau khi chỉnh sửa. Nếu không dùng sheet tmp mà bắt VBA nhớ triền miên cả 1 sheet dữ liệu ban đầu thì có nước treo máy.