Tính tổng của 4 dòng liên tiếp từ trên xuống dưới chỉ lấy kết quả 0 của 4 ô trống

Liên hệ QC
Bác Ba Tê ơi, em đã làm như bác bảo kiểm tra với 10 dòng 500 cột nhưng vẫn không được ạ! Mục tiêu của em là làm với 50 dòng 500 cột, nếu được như vậy thì tốt quá!
khỏi tính nếu thuật toán trên mà áp dụng vào giá trị thực của bạn thì mảng đích nó phải tương đương
50*50*50*50 *500 =3,125,000,000 phần tử thì chắc chắn là tràng bộ nhớ là cái chắc
 
Lần chỉnh sửa cuối:
Trước khi gởi bài #18 tôi đã thử rồi mới gởi.
Bạn cứ nói không được mà chẳng đưa cái file không được lên cho mọi người xem thì sao mà biết được.
Vâng em xin lỗi bác Ba Tê, em xin gửi file kiểm tra thử ạ. Thực tế em muốn làm tới 50 dòng 500 cột, nhưng kiểm tra khoảng 10 dòng 500 cột mà không được bác ạ!
 

File đính kèm

  • TINH_TONG.xlsm
    53.4 KB · Đọc: 5
Vâng em xin lỗi bác Ba Tê, em xin gửi file kiểm tra thử ạ. Thực tế em muốn làm tới 50 dòng 500 cột, nhưng kiểm tra khoảng 10 dòng 500 cột mà không được bác ạ!

Code không chạy vì lỗi dữ liệu, không phải do tràn bộ nhớ.
Trong các ô trống ở sheet1 có 1 ô bạn ấn 1 dấu cách, nên nó không phải là Empty.
 

File đính kèm

  • TINH_TONG.rar
    44.5 KB · Đọc: 14
Nhưng dữ liệu đúng thì cũng sẽ tràng bộ nhớ
 
Code không chạy vì lỗi dữ liệu, không phải do tràn bộ nhớ.
Trong các ô trống ở sheet1 có 1 ô bạn ấn 1 dấu cách, nên nó không phải là Empty.
Vâng, cảm ơn Bác Ba Tê nhiều quá! Bác có cách nào bỏ được dấu cách đó đi mà không ảnh hưởng đến dữ liệu không ạ? Cảm ơn bác!
 
khỏi tính nếu thuật toán trên mà áp dụng vào giá trị thực của bạn thì mảng đích nó phải tương đương
50*50*50*50 *500 =3,125,000,000 phần tử thì chắc chắn là tràng bộ nhớ là cái chắc
Số phần tử không phải vậy mà là 500 * tổ hợp chập 4 của 50 phần tử = 500 * 50 * 49 * 48 * 47/2/3/4= 230300*500= 115,150,000. Nếu khai báo mảng 230,300 hàng * 500 cột kiểu variant thì sẽ bị báo tràn bộ nhớ, nếu chia ra thành 5 nhóm 100 cột thì được. Còn khai báo mảng 230300*500 kiểu long thì không bị báo tràn bộ nhớ nhưng code chạy hết 25 phút mới xong. Mình test với code đơn giản sau để xem có tràn bộ nhớ không. Code của các thầy mình chưa dám thử nhưng nếu đúng 50 dòng, 500 cột thì mảng đích phải khai báo kiểu Long, redim (1 to 230300, 1 to 500)
Mã:
Sub Test()
Application.ScreenUpdating=False
Dim Arr()  As Long
Dim i&,j&
Redim Arr(1 to 230300, 1 to 500)
For i=1 to UBound(Arr)
For j=1 to UBound(Arr,2)
Arr(i,j)=j
Next
Next
Range("A1").Resize(i-1,j-1)=Arr
Application.ScreenUpdating=True
End Sub
 
Lần chỉnh sửa cuối:
Số phần tử không phải vậy mà là 500 * tổ hợp chập 4 của 50 phần tử = 500 * 50 * 49 * 48 * 47/2/3/4= 230300*500= 115,150,000. Nếu khai báo mảng 230,300 hàng * 500 cột kiểu variant thì sẽ bị báo tràn bộ nhớ, nếu chia ra thành 5 nhóm 100 cột thì được. Còn khai báo mảng 230300*500 kiểu long thì không bị báo tràn bộ nhớ nhưng code chạy hết 25 phút mới xong. Mình test với code đơn giản sau để xem có tràn bộ nhớ không. Code của các thầy mình chưa dám thử nhưng nếu đúng 50 dòng, 500 cột thì mảng đích phải khai báo kiểu Long, redim (1 to 230300, 1 to 500)
Mã:
Sub Test()
Application.ScreenUpdating=False
Dim Arr()  As Long
Dim i&,j&
Redim Arr(1 to 230300, 1 to 500)
For i=1 to UBound(Arr)
For j=1 to UBound(Arr,2)
Arr(i,j)=j
Next
Next
Range("A1").Resize(i-1,j-1)=Arr
Application.ScreenUpdating=True
End Sub
Bạn ơi, nếu kết hợp cách khai báo cả code của bác Ba Tê với code của bạn thì làm thế nào ạ? Xin cảm ơn bạn!
 
Bạn ơi, nếu kết hợp cách khai báo cả code của bác Ba Tê với code của bạn thì làm thế nào ạ? Xin cảm ơn bạn!
Khai báo Dim DArr() As Long.
Sau khi xác định dữ liệu có Rws dòng và Col cột thì khai báo Redim DArr(1 to Rws*(Rws-1)*(Rws-2)*(Rws-3)/24, 1 to Col). Chương trình sẽ chạy được nhưng sẽ rất lâu nếu Rws=50 và Col=500. Để cải thiện tốc độ có thể chia thành 5 mảng 100 cột. Máy mình 2GB RAM, có thể máy bạn RAM nhiều hơn sẽ chạy tốt với mảng 500 cột.
 
Khai báo Dim DArr() As Long.
Sau khi xác định dữ liệu có Rws dòng và Col cột thì khai báo Redim DArr(1 to Rws*(Rws-1)*(Rws-2)*(Rws-3)/24, 1 to Col). Chương trình sẽ chạy được nhưng sẽ rất lâu nếu Rws=50 và Col=500. Để cải thiện tốc độ có thể chia thành 5 mảng 100 cột. Máy mình 2GB RAM, có thể máy bạn RAM nhiều hơn sẽ chạy tốt với mảng 500 cột.
Cảm ơn bạn! Mình thử kết hợp như bạn hướng dẫn mà vẫn báo tràn bộ nhớ! Mong bạn có thể viết code đó giúp mình được không ạ?
 
Web KT

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

Back
Top Bottom