Menu

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

Nguyễn Triều Mỹ 19/03/2026 13:38 597 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình đang làm một file excel để quản lý dữ liệu bán hàng. Có một công việc mình phải làm đi làm lại nhiều lần là sao chép một vài cột dữ liệu từ sheet này sang sheet khác, nhưng chỉ khi thỏa mãn một điều kiện nhất định (ví dụ: chỉ lấy những đơn hàng có giá trị lớn hơn 1.000.000).

Trước đây, mình thường lọc thủ công rồi copy-paste. Tuy nhiên, với lượng dữ liệu lớn, việc này tốn rất nhiều thời gian và dễ sai sót.

Mình đã thử tìm hiểu VBA và viết được một đoạn code nhỏ để tự động hóa việc này. Code này sẽ duyệt qua từng dòng dữ liệu trong sheet nguồn, kiểm tra điều kiện, nếu thỏa mãn thì sẽ sao chép các cột chỉ định và dán sang sheet đích.

Dưới đây là đoạn code mình đã viết:

Sub CopyPasteConditional() ' Khai báo biến Dim wsNguon As Worksheet, wsDich As Worksheet Dim lastRowNguon As Long, lastRowDich As Long Dim i As Long ' Gán sheet Dim wsNguon As Worksheet: Set wsNguon = ThisWorkbook.Sheets("DuLieuGoc") Dim wsDich As Worksheet: Set wsDich = ThisWorkbook.Sheets("DuLieuLoc") ' Tìm dòng cuối cùng có dữ liệu ở sheet nguồn lastRowNguon = wsNguon.Cells(Rows.Count, "A").End(xlUp).Row ' Tìm dòng cuối cùng có dữ liệu ở sheet đích lastRowDich = wsDich.Cells(Rows.Count, "A").End(xlUp).Row ' Duyệt qua từng dòng dữ liệu ở sheet nguồn For i = 2 To lastRowNguon ' Điều kiện: Cột C (Doanh số) lớn hơn 1.000.000 If wsNguon.Cells(i, "C").Value > 1000000 Then ' Tăng dòng đích lên 1 lastRowDich = lastRowDich + 1 ' Sao chép và dán các cột A, B, C từ sheet nguồn sang sheet đích wsNguon.Cells(i, "A").Copy wsDich.Cells(lastRowDich, "A") wsNguon.Cells(i, "B").Copy wsDich.Cells(lastRowDich, "B") wsNguon.Cells(i, "C").Copy wsDich.Cells(lastRowDich, "C") End If Next i MsgBox "Đã hoàn tất sao chép dữ liệu có điều kiện!" End Sub

Lưu ý:

  • Bạn cần thay đổi tên sheet "DuLieuGoc" và "DuLieuLoc" cho phù hợp với file của bạn.
  • Cột "C" trong ví dụ là cột chứa giá trị doanh số, bạn cần điều chỉnh số cột cho đúng với dữ liệu của mình.
  • Điều kiện > 1000000 cũng có thể thay đổi theo yêu cầu.

Hy vọng đoạn code này hữu ích cho các bạn đang gặp tình huống tương tự. Nếu có cách nào tối ưu hơn hoặc gặp khó khăn, mọi người cùng thảo luận nhé!

3

Hay quá bạn ơi! Tự động hóa mấy tác vụ lặp đi lặp lại bằng VBA đúng là cứu cánh cho dân văn phòng. Mình cũng hay gặp tình huống tương tự, nhất là với file báo cáo bán hàng. Bạn có thể chia sẻ chi tiết hơn về đoạn code bạn viết không? Đặc biệt là phần xử lý điều kiện "giá trị lớn hơn 1.000.000" ấy. Mình đang muốn áp dụng cho file của mình mà chưa nghĩ ra cách tối ưu.

2
Topic hay quá bạn ơi! Tự động hóa các thao tác lặp đi lặp lại bằng VBA đúng là "cứu cánh" cho dân văn phòng mình, nhất là với những file dữ liệu lớn. Mình cũng hay gặp tình huống tương tự khi xử lý báo cáo bán hàng. Bạn có thể chia sẻ cụ thể hơn về đoạn code xử lý điều kiện "giá trị lớn hơn 1.000.000" không? Mình đang muốn áp dụng cho file của mình mà chưa nghĩ ra cách nào tối ưu.

Cảm ơn bạn đã chia sẻ!

3

Hay quá bạn ơi! Tự động hóa mấy tác vụ lặp đi lặp lại bằng VBA đúng là cứu cánh cho dân văn phòng. Mình cũng hay gặp tình huống tương tự, nhất là với file báo cáo bán hàng.

Bạn có thể chia sẻ chi tiết hơn về đoạn code bạn viết không? Đặc biệt là phần xử lý điều kiện "giá trị lớn hơn 1.000.000" ấy. Mình đang muốn áp dụng cho file của mình mà chưa nghĩ ra cách tối ưu.

5

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

Đăng nhập Đăng ký