- Chậm là do công thức của bạn dùng tham chiếu cả cột (1.048.576 dòng) trong khi sử dụng chưa đến 100.000 dòng.Em vẫn dùng Sumifs để tính tổng theo 3 điều kiện nhưng với dữ liệu ngày càng tăng số dòng lên, thì tốc độ tính toán chậm! mà em chưa thạo về Dictionary nên mong các Thầy chỉ giúp ah!
Liên quan gì đến Dictionary chứ. Bạn cứ sử dụng cú pháp If .... Then ....End if lồng vào nhau để cộng có điều kiện nhéEm vẫn dùng Sumifs để tính tổng theo 3 điều kiện nhưng với dữ liệu ngày càng tăng số dòng lên, thì tốc độ tính toán chậm! mà em chưa thạo về Dictionary nên mong các Thầy chỉ giúp ah!
Nếu là tôi thì bài này tôi PivotTable chứ không code không công thức gì ráoEm vẫn dùng Sumifs để tính tổng theo 3 điều kiện nhưng với dữ liệu ngày càng tăng số dòng lên, thì tốc độ tính toán chậm! mà em chưa thạo về Dictionary nên mong các Thầy chỉ giúp ah!
PivotTable là vô địch về tốc độ cũng như tính chính xác. Bạn không nên bỏ qua "đồ ngon" mà lại đi chọn "đồ dở" vậy chứ. VBA hay công thức, không có cái nào có thể qua mặt PVT về tốc độ đâuEm cũng nghĩ ngay từ đầu với PivotTable rồi ah! nhưng vẫn muốn thử thêm cách khác ah!
Đối với bạn thì nó chỉ là "thử"Em cũng nghĩ ngay từ đầu với PivotTable rồi ah! nhưng vẫn muốn thử thêm cách khác ah!
Code chỉ là dịch từ giải thuật ra ngôn ngữ lập trình thôi.em đang học code mà, cảm ơn các Sư phụ!
Bạn có thể gợi ý giải thuật trong trường hợp nầy ?Code chỉ là dịch từ giải thuật ra ngôn ngữ lập trình thôi.
Giải thuật tùm lum thì học chỉ là cách múa kiếm để tăng bắp thịt. Rồi dùng mớ bắp thịt ấy để lấy le với gái và hù dọa con nít. Từ đầu đến cuối chả trọn lấy một chiêu.
Bài này giải thuật không dính líu với đít sần đít sọt gì cả., học chỉ uổng công.
Giải thuật tùm lum thì học chỉ là cách múa kiếm để tăng bắp thịt. Rồi dùng mớ bắp thịt ấy để lấy le với gái và hù dọa con nít. Từ đầu đến cuối chả trọn lấy một chiêu.
.
Nếu dùng công thức trong VBA thì cũng chẳng tăng tốc gì đươc đâu bạn à. Nó hoàn toàn tương đương với động tác:Anh thử cái này mới vừa học xong
"Học" mà sao chọn đề tài khó nhai vậy? Với 3 mảng cần lọc duy nhất rồi cộng dồn, đâu phải chuyện dễem đang học code mà, cảm ơn các Sư phụ!
Bạn muốn nói cách dùng Dictionary?Bạn có thể gợi ý giải thuật trong trường hợp nầy ?
Cache đã dùng nhiều lần, cách update cache học qua code của bạn, còn Class Module thì mù tịt, khi nào rảnh sẽ ngâm cứu.Bạn muốn nói cách dùng Dictionary?
Như bài #5 đã nói qua, dùng mấy cái Object này hơi tốn năng lượng cho nên giải thuật đúng đắn phải có cách cache (tạm giữ dữ liệu) nó lại. Kỹ thuật cache hơi nguy hiểm, cần phải nắm vững chu trình (life cycle) của dữ liệu (đại khái chúng bao lớn, thêm bớt ra sao...). Nếu chỉ để mò code thì không xứng đáng thử.
Nếu chỉ là code mà mỗi lần dữ liệu thay đổi lại phải chạy code để "refresh" thì ở đây, ai biết Dic đều code được, bạn không cần phải hỏi giải thuật đó.
Nếu bạn có đọc một số bài của tôi các mục về các Object phức tạp sẽ thấy tôi dùng Static để cache chúng. Điểm quan trọng của cache là nếu đầu vào thay đổi thì cái cache phải biết mà thay đổi theo. Trong các bài kia, đầu vào không thay đổi cho nên tôi giản dị hoá điều kiện đó.
(*) Nếu bạn theo dõi nhiều sẽ thấy có người dùng biến Public ở toàn cục thay vì Static. Hai kỹ thuật này gần như nhau, vì cùng dùng bộ nhớ chung (heap) để giữ trị khi thoát hàm, lúc ấy các biến trong bộ nhớ riêng (stack) bị xoá hết. Biến toàn cục tuy ít phức tạp hơn Static nhưng nó không được bảo vệ. Biến Static thuộc về hàm, chỉ có hàm chứa nó mới thấy nó, muốn truy vấn sửa đổi gì thì phải nhờ hàm chứa nó làm.
(**) Cách cẩn thận và tốn công hơn nữa là dùng Class Module và từ đó tạo Object riêng. Cái này có lẽ bạn đọc bài của các bạn như Phan Tự Hướng và Nguyễn Duy Tuân đã thấy rồi.
Vào ngay tim mấy "cô" mới quan trọng. Trúng ngay tim thì được cái gì? Thọc cù lét cho "cô" nhột à?í nhột quá, bị anh ấy nói trúng ngay tim mình.
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2