thanks bạn đã quan tâm. Do mình không rành về vba nên viết đa số là dùng vòng lặp. mà với dữ liệu lên tới hơn chục nghìn dòng nó sẽ gần như bị đơ.
Mình cũng đang sửa lại code để xử lý nhanh hơn.
Mình sẽ liên hệ bạn để trao đổi thêm và mong học hỏi từ bạn nhiều hơn.
Kiến thức về VBA của tôi nông cạn và chắp vá còn non và xanh lắm, nhưng thấy bạn cũng có thái độ học hỏi nghiêm túc và qua đọc code của bạn, Tôi có 1 số lời khuyên bạn:
1/ Đã dùng VBA thì hạn chế dùng hàm của MS Excel, do mỗi lần bảng tính có sự thay đổi gì đó thì lại load lại tất cả các ô, nếu ô đó có công thức thì Excel lại phải tính toán lại từ đầu, do vậy file sẽ chậm, và dung lượng cũng tăng lên đáng kể.
2/ Dùng công thức của Excel thì không nên tham chiếu quá nhiều hàng, chỉ nên là dữ liệu đến đâu thì tham chiếu đến đó chứ không nên tham chiếu cả cột, như kiểu (M1:M1000) thay cho (M:M)
3/ Thay vì copy dữ liệu của Sheet(DL) sang sheet(KHSX) rồi sau đó mới dùng Filter để lọc các giá trị =0 và giá trị ="-", và chọn toàn bộ kết quả lọc đó để xóa và một loại các định dạng khác,
THÌ bạn lọc luôn trên ShDL với điều kiện là
Criteria1:="<>-", Operator:=xlAnd, Criteria2:="<>0". Sau đó copy và
PasteSpecial Paste:=xlPasteValues. như vậy sẽ được hết công thức trong kết quả paste
Phần định dạng thì chỉ cần thế này là đủ:
Selection.Borders.LineStyle = 1 'xlNone ( 1=kẻ khung, xlNone= không kẻ)
Selection.EntireColumn.AutoFit.
Bạn làm theo tôi chỉ dẫn bảo đảm là code vừa ngắn vừa dễ đọc và tốc độ cũng tăng đáng kể
4/ Tại sao khi có được kết quả sau khi lọc bạn lại phải xóa đi 1 số cột. Để in bảng này ra chăng?
(việc xóa các cột này cũng như ở trên là xóa đi những dòng có giá trị ở cột M =0 hoặc ="-" -khoảng 12.000 dòng, thì code không chạy chậm mới là chuyện lạ, mà kể cả xóa bằng thủ công (bằng tay) cũng chậm, quay quay và đơ luôn).
Chúc bạn thành công.