Lọc danh sách không trùng là 1 chủ đề khá thú vị trong Excel. Có rất nhiều cách để làm việc này. Tuy nhiên làm thế nào để danh sách không trùng được lọc ra sẽ tự động cập nhật khi thêm / bớt dữ liệu trong danh sách gốc? Nếu dùng công thức sẽ rất phức tạp. Và Học Excel Online sẽ giới thiệu với các bạn một cách rất đơn giản để làm việc đó 1 cách tự động, đó là sử dụng Advanced Filter kết hợp với VBA
Để giúp các bạn dễ hình dung thì chúng ta cùng thực hiện yêu cầu sau:
Trong bảng dữ liệu trên, cột Tên mặt hàng có rất nhiều mặt hàng và có thể lặp lại hoặc thêm mới những mặt hàng khác. Và yêu cầu của chúng ta là:
Cách thực hiện như sau:
Xem nhanh
Để có thể thực hiện thao tác record macro trước hết các bạn cần lưu ý:
Trong thẻ developer chọn Record macro tại:
Tiếp theo chúng ta sẽ thực hiện ghi lại thao tác lọc danh sách không trùng bằng Advanced Filter
Trong thao tác sử dụng advanced filter này chúng ta chú ý:
Sau khi lọc ra vị trí ô G1 chúng ta được kết quả là danh sách tên các mặt hàng không trùng.
Kết thúc việc record macro, chúng ta trở lại thẻ developer và chọn Stop recording
Cùng kiểm tra câu lệnh VBA vừa record được:
Sub Macro1()
Range(“C1:C19”).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range(“G1”), Unique:=True
End Sub
a. Thay đổi phạm vi vùng dữ liệu
Trong câu lệnh macro thì vùng Range(“C1:C19”) là vùng dữ liệu ban đầu. Chúng ta có thể xác định rõ hơn với 2 yếu tố:
Do vùng này đặt tại sheet1 nên ta có thể viết lại như sau:
Sheet1.Range(“C1:C100”)
Thay vì chỉ áp dụng từ C1 tới C19 thì chúng ta có thể mở rộng sẵn vùng này
b. Thay đổi vị trí xuất kết quả
Kết quả danh sách được trích xuất là Range(“G1”).
Chúng ta có thể thay đổi sang Sheet khác, vị trí khác. Ví dụ đặt tại Sheet2, tại ô A1
Sheet2.Range(“A1”)
Câu lệnh có thể viết lại là:
Sub Macro1()
Sheet1.Range(“C1:C100”).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range(“A1”), Unique:=True
End Sub
c. Gắn macro vào sự kiện thay đổi trong bảng dữ liệu
Viết lệnh với sự kiện worksheet.change tại sheet1 như sau:
Ý nghĩa của câu lệnh trên là: Khi Sheet1 có thay đổi trong vùng dữ liệu C2:C100 thì sẽ gọi ra câu lệnh Macro1 – chính là câu lệnh lọc dữ liệu theo danh sách không trùng.
Xem thêm: Sự kiện Worksheet_change trong VBA
Như vậy là chúng ta đã hoàn thành được cách ứng dụng Advanced Filter trong VBA để có thể tự động lọc danh sách không trùng.
Tuy nhiên trong câu lệnh trên cũng chứa nhiều điểm hạn chế:
Để giải quyết 2 vấn đề trên thì chúng ta có thể tìm hiểu thêm 1 số phương pháp sau:
Để tìm hiểu thêm nhiều kiến thức về VBA, mời bạn tham dự khóa học VBA101 – Tự động hóa Excel với lập trình VBA. Đây là khóa học rất hữu ích dành cho bạn, giúp bạn hiểu một cách bài bản về VBA và cách sử dụng VBA, ứng dụng VBA vào công việc để tăng hiệu quả. Hãy cùng khám phá nào: