Chào mọi người, mình là thành viên mới của diễn đàn. Hôm nay mình muốn chia sẻ một đoạn code VBA nhỏ mà mình tự viết để lọc dữ liệu theo nhiều điều kiện. Cái này rất hữu ích khi mình cần xử lý các bảng dữ liệu lớn mà các hàm lọc thông thường của Excel không đáp ứng hết được.
Trong công việc, đôi khi mình cần lọc ra những dòng thỏa mãn đồng thời nhiều tiêu chí khác nhau, ví dụ: lọc tất cả các đơn hàng trong tháng 1, của khu vực 'Miền Bắc', với trạng thái 'Đã giao'. Làm thủ công thì rất mất thời gian, mà dùng các hàm Excel cũng hơi phức tạp.
Với VBA, mình có thể viết một Sub đơn giản để làm việc này. Dưới đây là một ví dụ minh họa:
Sub LocDuLieuNhieuDieuKien()
Dim wsData As Worksheet
Dim wsFilter As Worksheet
Dim rngData As Range
Dim lastRow As Long
Set wsData = ThisWorkbook.Sheets("DuLieuGoc") 'Sheet chứa dữ liệu gốc
Set wsFilter = ThisWorkbook.Sheets("KetQuaLoc") 'Sheet để hiển thị kết quả
' Xóa dữ liệu cũ trên sheet kết quả
wsFilter.Cells.ClearContents
' Xác định vùng dữ liệu
lastRow = wsData.Cells(Rows.Count, "A").End(xlUp).Row
Set rngData = wsData.Range("A1:F" & lastRow) 'Giả sử dữ liệu từ cột A đến F
' Áp dụng AutoFilter
rngData.AutoFilter Field:=1, Criteria1:="*Miền Bắc*" 'Lọc theo cột 1 (Khu vực)
rngData.AutoFilter Field:=3, Criteria1:="*Đã giao*" 'Lọc theo cột 3 (Trạng thái)
' Thêm các điều kiện lọc khác nếu cần
' Copy dữ liệu đã lọc sang sheet kết quả
rngData.SpecialCells(xlCellTypeVisible).Copy Destination:=wsFilter.Range("A1")
' Tắt bộ lọc
wsData.AutoFilterMode = False
MsgBox "Đã lọc xong dữ liệu!", vbInformation
End SubGiải thích nhanh:
- Đoạn code này sẽ lọc trên sheet "DuLieuGoc" dựa trên 2 điều kiện: cột "Khu vực" chứa "Miền Bắc" và cột "Trạng thái" chứa "Đã giao".
- Kết quả sẽ được copy sang sheet "KetQuaLoc".
- Bạn có thể dễ dàng thay đổi tên sheet, phạm vi dữ liệu và các điều kiện lọc cho phù hợp với nhu cầu của mình.
Hy vọng chia sẻ này hữu ích cho các bạn. Nếu có cách nào hay hơn hoặc gặp khó khăn gì, mọi người cùng thảo luận nhé!