Sao chép sang hàng trống tiếp theo - Mẹo Excel

Mục lục

NYARCH viết

Tôi muốn Excel sao chép toàn bộ một hàng sang một trang tính Excel mới dựa trên một mục nhập ô. Ví dụ: tôi có dữ liệu trong ô A8: AG8, tôi muốn Excel sao chép toàn bộ hàng sang trang tính "a" nếu giá trị trong H8 là "ir" và trang tính "b" nếu giá trị trong H8 là "RR". Phần phức tạp nhất và không chỉ được sao chép, tôi cần sao chép nó vào hàng trống tiếp theo trên trang tính. Trong số 150 hàng hoặc lâu hơn, chỉ khoảng 15 hàng của mỗi loại sẽ thực sự được sao chép sang một trang tính mới.

MrExcel sẽ trao 50 điểm thưởng cho bất kỳ độc giả nào còn nhớ bài viết trên Tạp chí Hoa sen đưa ra 10 mẹo hay, trong đó mẹo số 4 là "Sử dụng phím Kết thúc để Di chuyển đến cuối Dải". Quay trở lại những ngày của Lotus, bạn có thể đặt điểm di động ở bất kỳ đâu trong một khối dữ liệu, nhấn KẾT THÚC rồi nhấn xuống và con trỏ ô sẽ chạy đến cuối dải. Excel có chức năng tương tự, VBA có chức năng tương tự và đây là chìa khóa để tìm hàng dữ liệu cuối cùng trên trang tính.

Kỹ thuật VBA là sử dụng End (xlDown) để mô phỏng phím End + Down hoặc End (xlUp) để mô phỏng phím End + Up. Nhấn chuỗi phím này sẽ di chuyển con trỏ ô đến cạnh tiếp theo của dải dữ liệu liền kề. Hãy tưởng tượng có các giá trị trong A1: A10 và A20: A30. Bắt đầu trong A1. Nhấn End + Down và con trỏ ô di chuyển đến A10. Nhấn End + Down và bạn đi đến A20, là cạnh trên cùng của dải dữ liệu liền kề tiếp theo. Nhấn End + Down và bạn sẽ đến A30. Tôi thực sự không hiểu làm thế nào để giải thích hành vi này bằng tiếng Anh đơn giản. Chỉ cần thử nó và bạn sẽ thấy nó hoạt động như thế nào.

Mẹo mà tôi sử dụng là bắt đầu tại Cột A ở hàng cuối cùng trong bảng tính và sau đó nhấn End + Up. Điều này sẽ đưa tôi đến hàng cuối cùng với dữ liệu. Sau đó tôi biết sử dụng hàng tiếp theo xuống dưới dạng hàng trống.

Đây là một vĩ mô bạo lực để giải quyết vấn đề của tuần này. Có, bạn chắc chắn có thể làm điều này một cách thanh lịch hơn với Tự động lọc. Dữ liệu hiện đang ở trên Trang tính 1, với các tiêu đề ở hàng 2.

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Range("A65536").End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Range("H" & x).Value If ThisValue = "ir" Then Range("A" & x & ":AG" & x).Copy Sheets("a").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Range("A" & x & ":AG" & x).Copy Sheets("b").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Cho rằng Excel 2007 có hơn 65.536 hàng, bạn có thể sử dụng macro này để nó tương thích về phía trước. Lưu ý rằng tôi sử dụng CELLS (Hàng, Cột) thay vì RANGE ở đây:

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Cells(x, 8).Value If ThisValue = "ir" Then Cells(x, 1).Resize(1, 33).Copy Sheets("a").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Cells(x, 1).Resize(1, 33).Copy Sheets("b").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Để biết các mẹo về cách sử dụng macro, hãy xem Giới thiệu Trình soạn thảo VBA trong Excel.

thú vị bài viết...