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