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 SubLư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
> 1000000cũ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é!