Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc lọc và sao chép dữ liệu theo nhiều điều kiện phức tạp bằng VBA

Mạc Tuyết Kim 06/04/2026 08:07 534 lượt xem 2 trả lời

Chào các anh em trong diễn đàn,

Dạo này công việc của mình liên quan nhiều đến việc xử lý dữ liệu trên Excel, đặc biệt là việc lọc và sao chép dữ liệu từ một file lớn sang một file khác dựa trên nhiều tiêu chí khác nhau. Trước đây mình hay làm thủ công bằng tay hoặc dùng các bộ lọc có sẵn của Excel, nhưng với lượng dữ liệu ngày càng tăng và các điều kiện lọc ngày càng phức tạp, cách này tốn rất nhiều thời gian và dễ sai sót.

Mình đã thử tìm hiểu và viết một đoạn code VBA để tự động hóa quá trình này. Ý tưởng cơ bản là mình sẽ định nghĩa các điều kiện lọc trong một bảng tính phụ, sau đó dùng VBA để đọc các điều kiện này và tiến hành lọc dữ liệu từ file nguồn, cuối cùng sao chép các dòng thỏa mãn điều kiện sang file đích.

Ví dụ, mình có một file chứa danh sách khách hàng với các cột như: Tên khách hàng, Ngày đăng ký, Loại dịch vụ, Trạng thái, Khu vực. Mình muốn lọc ra những khách hàng đã đăng ký trong Quý 1 năm 2023, sử dụng dịch vụ 'Premium', có trạng thái 'Active' và thuộc khu vực 'Miền Nam'.

Đoạn code mình viết có thể xử lý được các điều kiện này một cách linh hoạt. Mình đang muốn chia sẻ kinh nghiệm này với mọi người và cũng muốn hỏi xem liệu có anh em nào có cách tiếp cận khác hoặc có những hàm/thủ thuật VBA nào hay hơn để xử lý trường hợp này không?

Code của mình đại khái như sau:

Sub LocDuLieuTheoDieuKien() ' Khai báo biến Dim wsNguon As Worksheet, wsDich As Worksheet, wsDieuKien As Worksheet Dim lastRowNguon As Long, lastRowDich As Long Dim i As Long, j As Long ' Khai báo các biến điều kiện Dim ngayDK1 As Date, ngayDK2 As Date Dim loaiDV As String Dim trangThai As String Dim khuVuc As String ' Thiết lập các sheet Dim wsNguon = ThisWorkbook.Sheets("DuLieuGoc") Dim wsDich = ThisWorkbook.Sheets("KetQua") Dim wsDieuKien = ThisWorkbook.Sheets("DieuKienLoc") ' Đọc các điều kiện từ sheet 'DieuKienLoc' ngayDK1 = wsDieuKien.Range("B2").Value ngayDK2 = wsDieuKien.Range("C2").Value loaiDV = wsDieuKien.Range("D2").Value trangThai = wsDieuKien.Range("E2").Value khuVuc = wsDieuKien.Range("F2").Value ' Xóa dữ liệu cũ trên sheet 'KetQua' wsDich.Cells.ClearContents ' Lấy dòng cuối cùng của dữ liệu nguồn lastRowNguon = wsNguon.Cells(Rows.Count, "A").End(xlUp).Row ' Lặp qua từng dòng dữ liệu nguồn For i = 2 To lastRowNguon ' Kiểm tra các điều kiện If wsNguon.Cells(i, "B").Value >= ngayDK1 And wsNguon.Cells(i, "B").Value 
                
0

Chào bạn,

Việc tự động hóa lọc và sao chép dữ liệu bằng VBA là một chủ đề rất hay và thiết thực. Mình cũng đã từng gặp tình huống tương tự khi xử lý các file dữ liệu lớn.

Bạn có thể chia sẻ thêm về đoạn code VBA bạn đang viết không? Đặc biệt là cách bạn xử lý các điều kiện lọc phức tạp như thế nào? Có thể có một vài cách tiếp cận khác nhau mà mọi người trong diễn đàn có thể góp ý thêm để tối ưu hóa code của bạn.

Mong nhận được thông tin chi tiết hơn từ bạn!

3

Hay quá bạn ơi! Tự động hóa lọc và sao chép dữ liệu theo nhiều điều kiện phức tạp bằng VBA đúng là "cứu cánh" cho dân văn phòng. Mình cũng đang đau đầu với mấy file báo cáo lớn đây.

Bạn có thể chia sẻ đoạn code bạn đang viết được không? Mình tò mò muốn xem bạn xử lý các điều kiện phức tạp đó như thế nào. Có khi mình còn học lỏm được vài chiêu hay ho đấy!

4

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký