Giới Thiệu
Trong Excel, thường cần sao chép hàng từ sheet này sang sheet khác dựa trên tiêu chí nhất định (ví dụ: chỉ sao chép hàng có "Tổng giá > 150" hoặc "Loại trái cây = Mango"). Bài viết trình bày 6 phương pháp từ thủ công đến tự động hóa.
File Thực Hành
Tải file đính kèm để thực hành cùng các ví dụ.
6 Cách Sao Chép Hàng Theo Điều Kiện
1. Sử Dụng Tính Năng Lọc (Filter) – Thủ Công, Nhanh Cho Dữ Liệu Nhỏ
Áp dụng khi dữ liệu nhỏ, ít tiêu chí.
Ví Dụ: Sheet Filter Op. có dữ liệu Trái cây (Tên, Đơn giá, Khối lượng, Tổng giá). Sao chép hàng "Mango" sang sheet Result1.
Các Bước:
- Chọn dữ liệu (kể tiêu đề).
- Tab Data → Filter (Ctrl+Shift+L).
- Click mũi tên cột Fruits → Chỉ tick Mango → OK.
- Chọn dữ liệu đã lọc → Copy (Ctrl+C).
- Tạo sheet mới (+ hoặc Shift+F11) → Paste (Ctrl+V).
Kết quả: Sheet Result1 chỉ chứa hàng Mango.
2. Sử Dụng Advanced Filter (Bộ Lọc Nâng Cao) – Lọc Theo Điều Kiện Phức Tạp
Cho phép lọc theo điều kiện tính toán (ví dụ: Tổng giá > 150) và sao chép ra vị trí chỉ định không cần lọc tại chỗ.
Ví Dụ: Từ sheet Advanced sao chép sang Result1.1 các hàng có Tổng giá > 150.
Các Bước:
- Ở sheet kết quả (Result1.1), chọn một ô bất kỳ.
- Tab Data → Advanced.
- Chọn Copy to another location.
- List range: Chọn toàn bộ dữ liệu gốc (sheet Advanced).
- Criteria range: Chọn vùng chứa điều kiện (ví dụ: ô G1:G2, G1="Total Price", G2=">150").
- Copy to: Chọn ô bắt đầu dán kết quả (sheet Result1.1).
- Nhấn OK.
Kết quả: Dữ liệu lọc tự động dán vào sheet kết quả.
3. Sử Dụng Công Thức Mảng (Array Formula) – Tự Động Cập Nhật
Khi dữ liệu gốc thay đổi, kết quả tự cập nhật. Phù hợp chia dữ liệu theo "Shop Name" sang các sheet riêng.
Công Thức (Nhấn Ctrl+Shift+Enter trên Excel cũ, Enter trên Excel 365):
=IFERROR(INDEX(Sheet7!$A$4:$E$100, SMALL(IF(Sheet7!$F$4:$F$100=$F$3, ROW(Sheet7!$A$4:$B$100)-ROW(Sheet7!$B$4)+1), ROWS(Sheet7!$A$4:$B4)), COLUMN()), "")
Giải Thích Các Hàm:
- ROWS: Đếm số hàng tham chiếu (tăng dần khi kéo xuống).
- COLUMN: Lấy số cột (tăng dần khi kéo ngang).
- SMALL(array, k): Trả về giá trị nhỏ thứ k (dùng để lấy hàng thỏa mãn điều kiện lần lượt 1, 2, 3...).
- INDEX(array, row, col): Trả về giá trị tại giao cắt hàng/cột.
- IFERROR: Trả về rỗng nếu không còn hàng thỏa mãn (tránh lỗi #NUM!).
- Cột G (Helper):
=IF(AND(F4=Sheet15!$C$1, E4>=130), MAX(G$1:G2)+1, "-"). - Giải thích: Nếu Shop Name khớp (F4 = ô chọn trên sheet kết quả) VÀ Tổng giá >= 130 → gán số thứ tự tăng dần (MAX+1), ngược lại "-".
- Ô B7:
=IFERROR(INDEX(Sheet14!F:F, MATCH(ROWS($1:1), Sheet14!$G:$G, 0))&"", ""). - Kéo ngang, kéo dọc. Chọn Shop Name từ dropdown → Kết quả tự động hiện.
- Nhập tại ô B5 sheet Result3.
- Kết quả tự động tràn ra các hàng, cột thỏa mãn điều kiện (Shop Name = "Rooted").
- Dữ liệu gốc thay đổi → Kết quả tự cập nhật.
- Tab Developer → Insert → ActiveX Command Button.
- Chỉnh Caption, Font trong Properties.
- Double-click nút → VBE mở ra → Dán code:
Thực Hiện: Tạo sheet tên trùng "Shop Name" → Nhập công thức ô B4 → Kéo ngang, kéo dọc → Lặp lại cho các sheet khác.
4. Kết Hợp Hàm (IF, MAX, INDEX, MATCH) – Tạo Danh Sach Số Thứ Tự Động
Phương pháp "helper column" (cột phụ) trên sheet gốc, sau đó INDEX/MATCH trên sheet kết quả.
Sheet Functions (Dữ Liệu Gốc):
Sheet Result2 (Kết Quả):
5. Sử Dụng Hàm FILTER (Excel 365/2021+) – Ngắn Gọn, Hiện Đại Nhất
Hàm mảng động (Dynamic Array), tự tràn kết quả.
Công Thức: =FILTER(FILTER!B4:F14, FILTER!F4:F14="Rooted")
6. Sử Dụng VBA (Macro) – Tự Động Hóa Hoàn Toàn, Có Nút Bấm
Phù hợp quy trình lặp lại, người dùng không rành công thức.
Các Bước:
Private Sub CommandButton1_Click()
a = Worksheets("VBA").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If Worksheets("VBA").Cells(i, 4).Value > 150 Then
Worksheets("VBA").Rows(i).Copy
Worksheets("Result4").Activate
b = Worksheets("Result4").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Result4").Cells(b + 1, 1).Select
ActiveSheet.Paste
Worksheets("VBA").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("VBA").Cells(1, 1).Select
End Sub
- Đóng VBE → Thoát Design Mode → Click nút bấm trên sheet.
- Kết quả: Các hàng Tổng giá > 150 từ sheet VBA được copy sang sheet Result4.
💡 Giải Thích Code: Duyệt từng hàng sheet VBA, kiểm tra cột 4 (Total Price) > 150 → Copy toàn hàng → Dán vào hàng trống tiếp theo sheet Result4.
Kết Luận
6 phương pháp từ cơ bản đến nâng cao:
| Phương Pháp | Phù Hợp | Ưu Điểm | Nhược Điểm |
|---|---|---|---|
| 1. Filter Thủ Công | Dữ liệu nhỏ, một lần | Đơn giản, không cần công thức | Không tự động cập nhật |
| 2. Advanced Filter | Điều kiện phức tạp, một lần | Sao chép ra vị trí chỉ định | Không tự động cập nhật |
| 3. Array Formula | Cần tự động cập nhật, Excel cũ | Tự động, không VBA | Công thức phức tạp, chậm trên data lớn |
| 4. Helper Column + INDEX/MATCH | Cần tương tác (dropdown chọn tiêu chí) | Linh hoạt thay đổi tiêu chí | Cần cột phụ, setup phức tạp |
| 5. FILTER Function | Excel 365/2021+, cần tự động | Ngắn gọn, mạnh mẽ, tự tràn | Chỉ Excel mới |
| 6. VBA | Quy trình cố định, người dùng cuối | Một click, tự động hoàn toàn | Cần cho phép Macro, bảo mật |
Chọn phương pháp phù hợp nhất với tình huống của bạn!
Bài Viết Liên Quan
- Cách Hiển Thị Văn Bản Từ Ô Khác Trong Excel (4 Cách)
- VBA So Sánh 2 Sheet Và Copy Khác Biệt
- Cách Dùng VBA Dán Chỉ Giá Trị (Không Định Dạng)
- Copy Paste Không Hoạt Động Trong Excel (9 Nguyên Nhân & Giải Pháp)
- Cách Copy Nhiều Hàng Bằng Macro (4 Ví Dụ)