Delete row loạt sheet vba
Trong một file Excel có thể tạo nhiều Sheet làm việc, nhưng bạn chỉ cần dùng một hay một số Sheet và không cần các Sheet còn lại. Với một vài Sheet thì có thể dùng cách xóa thủ công nhưng số lượng vài chục hay vài trăm Sheet thì nên sử dụng câu lệnh để thực hiện công việc này sẽ tiết kiệm thời gian và công sức đáng kể. Xem bài học trước >> VBA Excel Cấp Tốc Bài 1 - Lọc Dữ Liệu Nhiều Điều Kiện Với Advanced Filter >> VBA Excel Cấp Tốc Bài 2 - In Bảng Cửu Chương >> VBA
Excel Cấp Tốc Bài 3 - In Ấn Nhanh Hàng Loạt Mở Visual BasicMở Visual Basic để code những câu lệnh thực hiện việc xóa các Sheet không Active: Developer -> Visual Basic -> chuột phải vào Sheet 1 -> Insert -> Module. Code chương trình Xóa Sheet không ActiveCấu trúc của một chương trình vẫn là Sub sau đó đến tên chương trình enter phần kết trúc chương trình sẽ tự động sinh ra.
Khi kích vào Run để chạy chương trình và sẽ hiện thông báo bạn thực sự có muốn xóa không bạn kích chọn Delete để xóa và thông báo cứ hiện lênh khi xóa mỗi Sheet. Với số lượng rất nhiều Sheet nên không thể tích Delete mãi được thì mình sử dụng dòng lệnh: Application.DisplayAlerts = False và dòng lệnh: Application.DisplayAlerts = True hiện thông báo khi thực hiện lại xóa Sheet để tránh nhưng nguy hiểm cho người sử dụng sau. Tạo Nút Nhấn ButtonPhần này tùy vào nhu cầu hay chương trình của bạn có nên tạo Button hay không. Mình sẽ hướng dẫn cho các bạn cần tạo: Developer -> Insert -> chọn hình giữ chuột và kéo -> tích vào Macro mà bạn muốn gán cho Button -> ok. Đoạn code VBA của chương trình xóa Sheets không Active:
Xem bài tiếp theo >> VBA Excel Cấp Tốc Bài 5 - Copy File Từ Một Thư Mục Sang Thư Mục Khác
em có code xoá dòng theo điều kiện như trên nhưng nếu dữ liệu lớn dữ liệu load rất lâu, vậy có cách nào để xoá dòng nhanh hơn trong vba excel không ạ?
Mỗi lần xóa dòng thì Excel sẽ phải đẩy dòng ở dưới lên lấp chỗ trống, nếu dòng cần xóa nằm rải rác hoặc xóa từng dòng sẽ rất lâu. Để khắc phục, bạn sử dụng cột phụ để đánh dấu dòng cần xóa rồi sort cho dòng đó xuống dưới, chỉ xóa một lần là xong. Do mình viết trên điện thoại nên bạn tự hoàn thiện code nhé.
Bạn tham khảo topic này: Bạn cần đăng nhập để thấy link Ở trên, bạn NhanSu đã dùng mảng để xử lý nhằm tăng tốc độ, thay vì xử lý trực tiếp trên Excel (cách ban đầu của bạn).
Mỗi lần xóa dòng thì Excel sẽ phải đẩy dòng ở dưới lên lấp chỗ trống, nếu dòng cần xóa nằm rải rác hoặc xóa từng dòng sẽ rất lâu. Để khắc phục, bạn sử dụng cột phụ để đánh dấu dòng cần xóa rồi sort cho dòng đó xuống dưới, chỉ xóa một lần là xong. Do mình viết trên điện thoại nên bạn tự hoàn thiện code nhé. cảm ơn @NhanSu rất nhiều mình áp dụng thử
Đề bài : Tìm trên cột A nếu giá trị nào bằng ô C1 thì delete dòng đó đi. Bạn cần đăng nhập để thấy hình ảnh Em nghĩ dòng code số 10 của anh sai:
Em nghĩ code đúng sẽ là:
Khi đó kết quả chạy code sẽ là: Bạn cần đăng nhập để thấy hình ảnh Không biết như thế có đúng không.
Có phải ý tưởng chỗ này là dùng filter rồi xóa một loạt không ạ? Bạn cần đăng nhập để thấy hình ảnh Hay là sort như thế này anh nhỉ: Bạn cần đăng nhập để thấy hình ảnh Bạn cần đăng nhập để thấy hình ảnh Mong được anh chỉ bảo thêm ạ. Em mới học VBA 1 tuần nên nhiều cái còn chưa biết.
Em là thanhphong đến từ diễn đàn THVBA. Các dòng code tô sáng là nơi em sửa code.
Thấy bạn trên dùng phương thức Union. Mình xin gửi 1 cách khác cho mọi người tham khảo:
Các bạn thử code xóa vài nghìn dòng không liên tục với dữ liệu khoảng vài trăm nghìn dòng sẽ thấy ý nghĩa của việc sort. Với dữ liệu như vậy, không sort thì thời gian không dưới 15ph, còn vừa sort vừa xóa chỉ 2s. Có điều cần chú ý khi sort thì không nên để công thức vì có thể sau sort thì tham chiếu trong công thức thay đổi nên kết quả sai. Đúng là code của mình viết nhầm và cần bỏ lọc trước khi
sort.
Đã xác nhận. Anh @NhanSu nói đúng. Thử lên tầm khoảng 100,000 dòng dữ liệu. Quay đắm đuối luôn.
Topic từ 2020 mà giờ đào xới lên sôi nổi vậy .
Mọi người cho mình hỏi cách - Xóa dữ liệu ở một hoặc nhiều ô khi đóng hoặc mở Excel. Xin cám ơn mọi người.
Nếu file save là file viết code thì : |