25/05/2018, 23:09

Lọc danh sách không trùng bằng VBA

Trong công việc kế toán nói chung, kế toán kho nói riêng, đôi khi bạn sẽ phải xử lý nội dung sau: Từ bảng ghi sổ phát sinh, bạn cần phải lọc ra danh sách các mặt hàng mà không bị trùng, chỉ xuất hiện 1 lần (như trong hình ảnh này) Xem thêm: Khóa học Excel văn phòng tại Hà Nội Và đặc ...

Trong công việc kế toán nói chung, kế toán kho nói riêng, đôi khi bạn sẽ phải xử lý nội dung sau:

Từ bảng ghi sổ phát sinh, bạn cần phải lọc ra danh sách các mặt hàng mà không bị trùng, chỉ xuất hiện 1 lần (như trong hình ảnh này)

Xem thêm: Khóa học Excel văn phòng tại Hà Nội

Và đặc biệt hơn nữa là làm sao chỉ với 1 nút bấm chúng ta đã lấy được danh sách này? Hãy cùng hocexcel.online tìm hiểu cách “Lọc / tạo danh sách không trùng bằng Excel VBA” này nhé:

Bước 1: Xác định 2 cột: cột G và cột H để làm cột phụ, tại đây:

Cột 1 sẽ dùng để thực hiện thao tác phát hiện các mã không bị trùng

Cột 2 sẽ đưa các mã không trùng đó ra 1 danh sách

Bước 2: Bạn mở cửa sổ VBA và tạo 1 Module, gõ nội dung dòng code này:

Mình sẽ nói chi tiết về ý nghĩa các dòng lệnh này như sau:

Sub Loc_Ma_Hang()

End Sub

Đây là 1 lệnh trong VBA, mà ở đó chúng ta có thể xây dựng nội dung, trình tự thực hiện cho câu lệnh đó bằng các dòng code. Cụ thể ở đây là câu lệnh giúp chúng ta xây dựng trình tự lọc mã hàng không trùng trong Sheet1.

Application.ScreenUpdating = False

….

Application.ScreenUpdating = True

Dòng lệnh này cho phép Tắt / mở chế độ cập nhật màn hình hiển thị của Excel (False là tắt tính năng này, True là cho phép chạy chức năng này). Thường được viết dưới dạng Tắt chức năng cập nhật => Thực hiện các dòng lệnh khác => Khi thực hiện xong sẽ Mở lại chức năng cập nhật màn hình.

Dim Lrow As Long
Lrow = Sheet1.Cells(Rows.Count, 3).End(xlUp).Row

Tìm dòng cuối của bảng 1 (Sheet1), tính với vị trí cột thứ 3 (Cột C)

Sheet1.Range(“H3:H” & Lrow).ClearContents

Xóa danh sách lọc cũ đi. Ở đây cột H sẽ là nơi chứa kết quả lọc, tính từ dòng thứ 3

Sheet1.Range(“G4:G” & Lrow).Formula = “=Countif($C$4:C4,C4)”

Gán vào cột G, từ dòng thứ 4 đến dòng cuối cùng trong bảng công thức Countif (đếm theo điều kiện), vùng cần đếm là từ C4 đến C4 (trong đó cố định điểm đầu là ô C4), giá trị cần đếm là giá trị tại ô C4

Khi công thức này gán vào các dòng tiếp theo, thì điểm $C$4 không đổi, còn các vị trí khác sẽ thay đổi, do đó chỉ những dòng nào cho kết quả =1 thì mới không bị trùng.

Sheet1.Range(“G3:G” & Lrow).AutoFilter Field:=1, Criteria1:=1

Sử dụng chức năng AutoFilter để lọc trong vùng G3 tới dòng cuối của bảng dữ liệu, giá trị lọc bằng 1 (là các mã hàng không trùng)

Sheet1.Range(“C4:C” & Lrow).SpecialCells(xlCellTypeVisible).Copy

Chỉ copy những giá trị hiển thị (không bị lọc bỏ) tại cột C, từ dòng 4 tới dòng cuối của bảng

Sheet1.Range(“H3”).PasteSpecial xlPasteValues

Dán nội dung vừa copy vào ô H3

Application.CutCopyMode = False

Sau khi đã paste xong sẽ bỏ chức năng copy

Sheet1.Range(“G3:G” & Lrow).AutoFilter

Bỏ chức năng filter đi

Sheet1.Range(“G3:G” & Lrow).ClearContents

Bỏ công thức lọc ở cột G đi

Như vậy thao tác lọc đã hoàn thành.

Học Excel kế toán với cách chuyên gia

Tiếp đến chúng ta gán Sub này vào 1 nút bấm, sử dụng Insert/Sharp để vẽ 1 hình chữ nhật.

Click chuột phải vào hình chữ nhật, bấm chọn Assign Macro

Trong cửa sổ Assign Macro, bấm chọn Macro Name là tên Sub mà chúng ta đã tạo.

Bấm ok để đóng cửa sổ Assign Macro

Bây giờ chúng ta bấm vào hình chữ nhật, toàn bộ danh sách mã hàng không trùng đã được lọc ra tại cột H

Tại ô danh sách mã hàng (ô J1), chúng ta bấm chọn chức năng Data / Validation

Trong cửa sổ Data Validation, mục Allow chọn List => Mục Source chọn phần danh sách ở cột H (có thể chọn phần Source này lớn hơn nội dung danh sách để có thể dự phòng những mã hàng phát sinh thêm trong quá trình nhập).

Đừng bỏ lỡ bộ tài liệu hướng dẫn học Excel 2016 

0