Nhờ kiểm tra tại sao lệnh ShowAllData chạy rất chậm (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
573
Chào các anh chị
Em có file như đính kèm với các code được cóp nhặt từ diễn đàn.
Trong file em có tạo ô tìm kiếm thông qua tính năng lọc bằng VBA
Khi nhập từ khóa vào ô J2 để lọc thì không vấn đề gì, nhưng khi xóa dữ liệu của ô J2 để hủy lọc thì Excel chạy rất lâu.
em đã xem xét và thử sửa một số chỗ mà không khắc phục được vấn đề này.
Rất mong các anh chị có kinh nghiệm chỉ giáo
Chân thành cảm ơn

1534176175002.png
Link tải file đính kèm: https://www.dropbox.com/s/ex10usvtdk2tayi/DienVan.xlsb?dl=0
 
Do dữ liệu của bạn gần 10000 dòng nên autofilter lâu thôi.
 
Upvote 0
Do dữ liệu của bạn gần 10000 dòng nên autofilter lâu thôi.
Không phải vì vấn đề này đâu bạn
1. Mình đã xóa hết Conditional Formatting, xóa hết công thức thay bằng giá trị ở cột J
2. Mình đã bỏ những code khác, làm ngắn lại dữ liệu
Nhưng kết quả Excel chạy vẫn chậm.
Giả sử do dữ liệu nhiều thì việc lọc cũng phải chậm, nhưng ở đây lại khác, khi bỏ lọc mới thấy chậm
Mình đang nghĩ có thể do cái Worksheet_Change, có thể code mình vụng về nên chúng "trói" lẫn nhau.
Rất mong mọi người chỉ giúp
Xin cảm ơn
 
Upvote 0
Bạn chọn cả sheet và chuyển background color = no fill, clear hết conditional formatting là được.
 
Upvote 0
Bạn chọn cả sheet và chuyển background color = no fill, clear hết conditional formatting là được.
Cách của bạn không giải quyết được vấn đề gì của mình.
Mình đã nói là trước khi up bài mình đã xóa hết những yếu tố nghi ngờ gây chậm, nhưng nó vẫn chạy chậm
Ngoài ra mình cũng không thể "gọt chân cho vừa giày". Với file như thế, bạn có thể sửa code để file chạy nhanh khi xóa Filter không ?
Cảm ơn bạn
 
Upvote 0
Bạn có thể cho mình biết mục đích của bạn lọc để làm gì được không?
 
Upvote 0
Mình đã thử nhiều cách rồi, kết luận của mình vẫn là bài #2. Đã thử xóa hết tất cả các module cũng như các sub không cần đến và sử dụng code ngắn hơn để test thử sự kiện worksheet_change:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("j2")) Is Nothing Then Range("a4:n11000").AutoFilter Field:=10, Criteria1:="=*" & Target & "*"
End Sub
Kết quả vẫn chậm, thử làm như bài #4 thì nhanh hơn được tý nhưng vẫn chậm, xóa bớt dòng từ 10000 xuống còn khoảng 500 thì kết quả trả lại nhanh. Bạn nhờ mọi người trên đây hỗ trợ tiếp xem.
 

File đính kèm

Upvote 0
Intersect(Target, Range("j2"))
Có một ô [J2] thôi thì so sánh Target với nó luôn
PHP:
Target.Address = "$J$2"
Range("a4:n11000").AutoFilter Field:=10, Criteria1:="=*" & Target & "*"
Filter với 1 điều kiện thì chỉ cần chọn một cột cần filter thôi.
PHP:
Range("J4:J11000").AutoFilter Field:=1, Criteria1:=dieu_kien
 
Upvote 0
Filter với 1 điều kiện thì chỉ cần chọn một cột cần filter thôi.
PHP:
Range("J4:J11000").AutoFilter Field:=1, Criteria1:=dieu_kien
Cảm ơn anh, giờ em mới biết là khi filter 1 dk thì có thể filter cột đó thôi, trước giờ em toàn xài cả vùng.
 
Upvote 0
Cảm ơn anh, giờ em mới biết là khi filter 1 dk thì có thể filter cột đó thôi, trước giờ em toàn xài cả vùng.
Thì nó giống như mình cứ lọc bình thường 1 ô thì dữ liệu các ô khác cũng đi theo, miễn khai báo vùng thỏa mãn điều kiện lọc. Em nghĩ vậy
 
Upvote 0
Cảm ơn anh, giờ em mới biết là khi filter 1 dk thì có thể filter cột đó thôi, trước giờ em toàn xài cả vùng.
Câu trên mình viết chưa chính xác.

Chỉnh lại: Filter với điều kiện (một hoặc nhiều điều kiện AND/OR gì đó chẳng hạn) thuộc 1 cột thì chỉ cần chọn 1 cột cần filter.

Hay nói chung: Khi điều kiện filter thuộc cột nào thì chỉ cần chọn 1 vùng có số cột nhỏ nhất chứa những cột đó.
Ví dụ: Điều kiện Filter thuộc cột B và cột G thì vùng cần chọn từ B-G (B1:G20 chẳng hạn).
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom