Menu

Tự động hóa việc sao chép dữ liệu có điều kiện giữa các Sheet bằng VBA

Âu Uy Hồng 05/06/2026 22:18 444 lượt xem 2 trả lời

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

Mình đang làm một file Excel khá lớn, có nhiều sheet con chứa dữ liệu bán hàng theo từng tháng. Hiện tại, mình đang phải copy thủ công dữ liệu từ các sheet tháng này sang một sheet tổng hợp dựa trên một vài điều kiện nhất định (ví dụ: chỉ lấy các đơn hàng có giá trị trên 1 triệu đồng). Việc này tốn khá nhiều thời gian và dễ sai sót.

Mình đã tìm hiểu sơ qua về VBA và muốn tự động hóa công việc này. Mục tiêu là tạo một nút bấm, khi click vào thì nó sẽ tự động quét qua các sheet tháng (ví dụ: Sheet_Thang1, Sheet_Thang2, ...), tìm những dòng dữ liệu thỏa mãn điều kiện và copy chúng sang một sheet tổng hợp (ví dụ: Sheet_TongHop).

Có anh em nào đã từng làm qua hoặc có kinh nghiệm về việc này có thể chia sẻ cho mình một đoạn code mẫu hoặc hướng dẫn các bước cơ bản để thực hiện không ạ? Mình đang phân vân không biết bắt đầu từ đâu, nên dùng vòng lặp For Each hay For Next, làm sao để xác định được các sheet cần quét, và làm sao để đặt điều kiện lọc hiệu quả.

Rất mong nhận được sự giúp đỡ từ cộng đồng!

Xin cảm ơn!

2

Chào bạn,

Vấn đề tự động hóa copy dữ liệu theo điều kiện giữa các sheet này mình cũng từng gặp. Thay vì dùng vòng lặp For Each duyệt qua từng sheet tháng, bạn có thể thử cách này xem sao:

1. Tạo một mảng tên các sheet tháng cần xử lý. 2. Dùng vòng lặp For duyệt qua mảng đó. 3. Trong mỗi vòng lặp, bạn có thể lọc dữ liệu trực tiếp trên sheet nguồn bằng AutoFilter rồi copy vùng dữ liệu đã lọc sang sheet tổng hợp. Cách này đôi khi nhanh hơn và code gọn gàng hơn một chút.

Bạn đã thử dùng AutoFilter cho việc lọc dữ liệu trước khi copy chưa? Chia sẻ thêm nếu bạn gặp khó khăn nhé!

2

Chào bạn,

Mình hiểu vấn đề bạn đang gặp phải. Việc copy thủ công dữ liệu theo điều kiện giữa nhiều sheet đúng là tốn thời gian và dễ sai sót. Tự động hóa bằng VBA cho trường hợp này là hoàn toàn khả thi và rất hiệu quả.

Bạn đã nghĩ đến việc dùng vòng lặp For Each để duyệt qua các sheet tháng, sau đó dùng CopyFromRecordset hoặc lặp qua từng dòng để kiểm tra điều kiện và ghi dữ liệu vào sheet tổng hợp chưa? Nếu bạn cần một ví dụ cụ thể hơn về cách lọc dữ liệu theo điều kiện (ví dụ: Cells(i, j).Value > 1000000) thì cứ hỏi nhé.

Chúc bạn sớm hoàn thành file Excel của mình!

5

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

Đăng nhập Đăng ký