Cần cách tính hàm Sumifs với dữ liệu lớn ra kết quả nhanh

Liên hệ QC
Nếu Debug.Print a=b thì sao ta?
Thì sẽ ra True, bởi vì kiểu dữ liệu DateTime (a) và Double (b) có thể được ép về cùng dạng để so sánh với nhau.
Tuy nhiên, nếu bạn xem kỹ thì sẽ thấy bài #7 khai báo biến lấy dữ liệu va lu tu này là string.
Nếu a và b khai báo là string và A1 là 14-08-2019 thì
a = "14/08/2019"
b = "43691"
Và a=b là False
 
Bạn cho mình hỏi ngu cái nha, Sau dán code vào thì làm như thế nào nữa bạn. Mình không biết gì về VBA luôn.
Bạn dán code vào Module trong màn hình VBA
Chọn trở lại màn hình bảng tính sheet "Result", chọn menu Insert, chon5n Shapes, chọn hình Mặt cười, vẽ Shape vào bảng tính, bấm chuột phải vào Shape, chọn Assign Macro, chọn Macro tương ứng. Khi cần chạy code, bấm vào biểu tượng code
 
Chờ hơn 1 ngày rồi mà chả thấy ai đá động gì thêm tới cái vụ ngày và va-lu-tu.

Thử đặt A1:A5 = ngày 01/08 -> 05/08; và B1:B5 = N(A1) -> N(A5) (tức là trị của 5 ngày kia)
Bầy giờ chạy code này:
Sub t()
a = [a1:b5].Value
a2 = [a1:b5].Value2
[c1:d5] = a ' thuần Value
[e1:f5] = a2 ' Value chép từ Value2
[g1:h5].Value2 = a ' Value2 chép từ Value
[i1:j5].Value2 = a2 ' Value2 chép từ Value2
End Sub

Trong 4 cái kết quả nhận được, cái nào là cái quý vị muốn? Bản thân tôi thì chỉ chọn trường hợp thuần Value, không muốn nhìn tới 3 trường hợp kia.

Ở GPE này, phần lớn các code là lấy dữ liệu ra mảng, làm gì đó (có thể chuyển qua mảng khác) rồi chép trở lại vào một nơi khác.
Value2 là một chọn lựa rất nguy hiểm cho công việc này. Cái lợi của tốc độ không đủ bù lấp cái phiền phức - phải luôn lưu ý xem dữ liệu có chứa date.

Nếu quý vị chịu khó đọc những bài của tôi mấy năm về trước sẽ thấy tôi đã từng dùng Value2. Nhưng sau đó, nhận ra nó quá nguy hiểm cho GPE, tôi bỏ luôn.
Khi người ta nói về cái hay, cái đẹp của Value2 là người ta nói về trường hợp tổng quát. GPE là môi trường hơi đặc thù một chút.
 
Khi người ta nói về cái hay, cái đẹp của Value2 là người ta nói về trường hợp tổng quát. GPE là môi trường hơi đặc thù một chút.
Chính xác. Tôi đã lặp đi lặp lại điều này.
Mà nếu nói về tốc độ thì cũng không thể kiểu: Tôi thấy Value2 nhanh hơn Value nên tôi LUÔN dùng Value2. Không phải thế.
Thậm chí khi xét về tốc độ thì Value hay Value2 chỉ là một bước rất nhỏ khi làm một bài toán. Còn bước tìm kiếm, cộng trừ nhân chia, sao chép ... Bước này mới cải thiện tốc độ đáng kể. Thuật toán và các thủ thuật cho bước này mới đem lại sự cải thiện đáng kể. Khi xét một bài toán thì phải biết bước nào là bước cực kỳ quan trọng. Chọn "sai" phương pháp cho bước không quan trọng có thể làm tốc độ giảm đi không đáng kể nhưng chọn "sai" phương pháp cho bước quan trọng sẽ làm tốc độ giảm đi rất đáng kể. Làm gì cũng phải suy nghĩ. Không thể cứ: "phở" ngon hơn "cơm" vậy từ nay tôi sẽ chỉ ăn "phở". Không thể cứng nhắc như thế được.

Mà chuyện Value hay Value2 là quyền của mỗi người. Anh A dùng Value2 vì anh ta có quyền. Tôi không dùng Value2 vì trong trường hợp cụ thể tôi không quan trọng chuyện tốc độ ở mức "phần nghìn" s thì tôi cũng có quyền. Chả ai có quyền cười ai cả. Anh A "gom góp" từng nhịp đồng hồ còn tôi không màng thì sao có thể ai cười ai ở đây?
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom