tuananhya2
Thành viên mới

- Tham gia
- 18/8/12
- Bài viết
- 8
- Được thích
- 0
Anh bebo021999 ơi,=SUMPRODUCT(($B$5:$I$11=$D$16)*($B$6:$I$12=$D$17))=3
Công thức Countifs() này là công thức mảng phải không anh, nếu vậy thì thôi em chưa học. Em chỉ mới học Countif() thôi chứ chưa học Countifs().=COUNTIFS($B$5:$I$11,D16,$B$6:$I$12,D17)
countif là trường hợp đặc biệt của countifs. Countif đếm có 1 đk, còn countifs là đếm thỏa nhiều đkAnh bebo021999 ơi,
Cho em hỏi ngu anh nghen. Vì hàm Sumproduct() em không rành lắm nên câu hỏi quá ngu thì xin đừng phiền lòng.
Em đang học hàm Sumproduct() như sau= (Array 1, Array 2,...., Array n). Sao trong công thức Sumproduct() của anh lại có toán tử * thế, thay vì phải là ","
Thêm nữa, khi em thay đổi vùng dữ liệu như sau=SUMPRODUCT(($B$5:$I$12=$D$16)*($B$5:$I$12=$D$17))=0 (≠3) → Sao công thức lại ra trớt quớt vậy anh??? Em chỉ thêm vùng dữ liệu thôi mà, đâu có bớt đâu, dư chứ đâu có thiếu đâu mà sao Excel lại không có work??? Em sai chỗ nào thế anh, phiền anh giải thích rồi. Chân thành cảm ơn anh.
Công thức Countifs() này là công thức mảng phải không anh, nếu vậy thì thôi em chưa học. Em chỉ mới học Countif() thôi chứ chưa học Countifs().
Không phải là em lười không muốn học công thức mảng nhưng mà em tự thấy Excel của em còn rất hạn chế nên đợi thêm thời gian nữa em tự mày mò học mảng sau. Trời!!! Cứ nghĩ tới mảng là sợ không tả được, chắc nói ra anh cũng không hình dung được cảm giác em sợ công thức mảng đến như thế nào đâu.
Chúc anh ngày Chúa Nhật rất là vui vẻ, hạnh phúc & bình an.
phihndhsp ơi,countif là trường hợp đặc biệt của countifs. Countif đếm có 1 đk, còn countifs là đếm thỏa nhiều đk
Countifs(vùng đk1, đk1, vùng đk2, vùng đk2,...)
Cám ơn phihndhsp nha.Hiểu nôn na như thế này nè
sumproduct là hàm cha hàm mẹ
nó có thể bao quát hàm sum, sumif,sumifs, count,countif,countifs
dao thì có nhiều loại dao, không ai lấy dao mổ trâu để mổ gà
(ý trên là ý chủ quan của cá nhân tôi thôi nha)
SUMPRODUCT, SUM thì là tổng, COUNTIF là đếm. Nhưng một khi bạn chỉ cần kết quả mà trong trường hợp cụ thể nào đó cả 3 hàm đều trả về cùng 1 giá trị thì lúc đó bạn có thể dùng hàm nào cũng được.Theo mình được hiểu là hàm nào mà có chữ Sum.... có nghĩa là tính tổng mà chẳng hạn tổng doanh thu... đâu phải là hàm đếm đâu.
=COUNTIF(A1:A10;1)
=SUM(A1:A10)
=SUMPRODUCT(A1:A10)
=SUMPRODUCT(($B$5:$I$11=$D$16)*($B$6:$I$12=$D$17))
=COUNTIFS($B$5:$I$11,D16,$B$6:$I$12,D17)
Anh bebo021999 ơi,
Cho em hỏi ngu anh nghen. Vì hàm Sumproduct() em không rành lắm nên câu hỏi quá ngu thì xin đừng phiền lòng.
Em đang học hàm Sumproduct() như sau= (Array 1, Array 2,...., Array n). Sao trong công thức Sumproduct() của anh lại có toán tử * thế, thay vì phải là ","
....
Công thức Countifs() này là công thức mảng phải không anh
Countif, sumif là hàm chuyên dụng để đếm, sum có điều kiện. Sumproduct là hàm bao quát hơn, có thể đếm và sum. Tuy nhiên, nếu có thể dùng countif, sumif thì không nên dùng Sumproduct để giảm tốc độ tính toán. VD: có cầu thì nên đi qua cầu cho khỏe, không nên lội qua sông.phihndhsp ơi,
Vậy nếu Countifs() & Sumproduct() cùng ra kết quả như nhau vậy Sumproduct() cũng là hàm đếm thỏa nhiều điều kiện sao??? Theo mình được hiểu là hàm nào mà có chữ Sum.... có nghĩa là tính tổng mà chẳng hạn tổng doanh thu... đâu phải là hàm đếm đâu. Sao mình vẫn rối rối thế nào ấy với cái hàm Sumproduct() này. Chả biết diễn tả sao cho bạn hiểu nữa.
Bằng cách nào để biết tốc độ tính toán khi so sánh các hàm với nhau như so sánh giữa: Sumif, Countif và Sumproduct hả anh?Tuy nhiên, nếu có thể dùng countif, sumif thì không nên dùng Sumproduct để giảm tốc độ tính toán. VD: có cầu thì nên đi qua cầu cho khỏe, không nên lội qua sông.
Mình thấy bài khá hay, bạn dùng đc VBA thì test thử nhaBằng cách nào để biết tốc độ tính toán khi so sánh các hàm với nhau như so sánh giữa: Sumif, Countif và Sumproduct hả anh?
Đơn giản thôi, xét ví dụ Sumif và Sumproduct như bảng sau: Cột B là tháng, cột C là số tiềnBằng cách nào để biết tốc độ tính toán khi so sánh các hàm với nhau như so sánh giữa: Sumif, Countif và Sumproduct hả anh?
Đơn giản thôi, xét ví dụ Sumif và Sumproduct như bảng sau: Cột B là tháng, cột C là số tiền
Tính tổng số tiền 3 tháng, từ tháng 1 tới tháng 3
=SUMIF(B2:B13,"<=3",C2:C13)
=SUMPRODUCT((B2:B13<=3)*C2:C13)
Cái nào nhanh hơn:
Cả 2 cái đều duyệt cột B từ tháng 1 tới tháng 12, nhưng:
* SUMIF: Xét từng dòng trong cột B trước, nếu thỏa điều kiện <=3 thì mới tính toán:
Tháng 1 =5
Tháng 2 = 5+10= 15
Tháng 3: 15+15 =30
Từ tháng 4 trở đi, nó không thực hiện tính toán vì nhận thấy không thỏa điều kiện tháng <=3
* SUMPRODUCT: Xét từng dòng trong cột B, cộng bất chấp thỏa hay không thỏa:
Tháng 1 = (1<=3)*5 = 1*5 = 5
Tháng 2 = 5+(2<=3)*10= 5 + 1*10 = 15
Tháng 3= 15+(3<=3)*15 =15+1*15=30
Tháng 4=30+(4<=3)*20 = 30+0*20=30
Tháng 5=30+(5<=3)*25 = 30+0*25=30
...
Tháng 12=30+(12<=3)*60 = 30+0*60=30
Kết luận: SUMIF thực hiện 3 phép tính, SUMPRODUCT thực hiện 12 phép tính
Với data lớn, vài chục ngàn dòng, sẽ thấy sự khác biệt!!!
View attachment 191278
Code này không chạy trên máy 64bit.Mình thấy bài khá hay, bạn dùng đc VBA thì test thử nha
http://dailydoseofexcel.com/archives/2015/04/25/timing-formulas/
Bạn chỉ việc copy nó vào một module, chọn cell có công thức rồi. Nhấn Alt F8 chọn TimeFormula.
Cái này cũng mới là suy luận theo suy nghĩ chủ quan, chứ chưa phải là bằng chứng xác thực máy thật sự xử lý bằng cách nào, chỉ có mấy ông tạo ra nó mới trả lời chính xác.Đơn giản thôi, xét ví dụ Sumif và Sumproduct như bảng sau: Cột B là tháng, cột C là số tiền
Tính tổng số tiền 3 tháng, từ tháng 1 tới tháng 3
=SUMIF(B2:B13,"<=3",C2:C13)
=SUMPRODUCT((B2:B13<=3)*C2:C13)
Cái nào nhanh hơn:
Cả 2 cái đều duyệt cột B từ tháng 1 tới tháng 12, nhưng:
* SUMIF: Xét từng dòng trong cột B trước, nếu thỏa điều kiện <=3 thì mới tính toán:
Tháng 1 =5
Tháng 2 = 5+10= 15
Tháng 3: 15+15 =30
Từ tháng 4 trở đi, nó không thực hiện tính toán vì nhận thấy không thỏa điều kiện tháng <=3
* SUMPRODUCT: Xét từng dòng trong cột B, cộng bất chấp thỏa hay không thỏa:
Tháng 1 = (1<=3)*5 = 1*5 = 5
Tháng 2 = 5+(2<=3)*10= 5 + 1*10 = 15
Tháng 3= 15+(3<=3)*15 =15+1*15=30
Tháng 4=30+(4<=3)*20 = 30+0*20=30
Tháng 5=30+(5<=3)*25 = 30+0*25=30
...
Tháng 12=30+(12<=3)*60 = 30+0*60=30
Kết luận: SUMIF thực hiện 3 phép tính, SUMPRODUCT thực hiện 12 phép tính
Với data lớn, vài chục ngàn dòng, sẽ thấy sự khác biệt!!!
View attachment 191278
Bạn vào đây xem kết quả thử nhé.Cái này cũng mới là suy luận theo suy nghĩ chủ quan, chứ chưa phải là bằng chứng xác thực máy thật sự xử lý bằng cách nào, chỉ có mấy ông tạo ra nó mới trả lời chính xác.
Tuy nhiên, cách của bạn @moctriet hy vọng là câu trả lời khách quan bằng việc cân đong đo đếm.
hihi ^o^
Mấy ông này đưa bằng chứng "ăn gian": trưng cột phụ đánh bằng tay mà không dùng công thức!?? của đáng tội!?, đáng lẽ phải cộng cả hai thời gian của Sumif dùng cột phụ + công thức tạo ra cột phụ nữa mới tương đồng với các hàm khác được chứ!Bạn vào đây xem kết quả thử nhé.
https://exceloffthegrid.com/optimize-formula-calculation-speed-part-8-sum-with-multiple-criteria/
Đại khái thế này:
Họ test SUM nhiều điều kiện. Xét trên 999.000 dòng, có các phương án sau:
1)Dùng cột phụ, sau đó SUMIF => 0.72 s
2) SUMIFS => 1.29s
3) Sum(array) : Dùng công thức mảng =>7.34s
4) Sumproduct: => 7.35s
Tóm lại, Nếu dùng được cột phụ là tốt nhất. Không thì dùng SUMIFS.
Công thức mảng và SUMPRODUCT là lựa chọn cuối cùng (vì phải thực hiện 999.000 phép tính)
Nếu công thứcĐơn giản thôi, xét ví dụ Sumif và Sumproduct như bảng sau: Cột B là tháng, cột C là số tiền
Tính tổng số tiền 3 tháng, từ tháng 1 tới tháng 3
=SUMIF(B2:B13,"<=3",C2:C13)
=SUMPRODUCT((B2:B13<=3)*C2:C13)
Cái nào nhanh hơn:
Cả 2 cái đều duyệt cột B từ tháng 1 tới tháng 12, nhưng:
* SUMIF: Xét từng dòng trong cột B trước, nếu thỏa điều kiện <=3 thì mới tính toán:
Tháng 1 =5
Tháng 2 = 5+10= 15
Tháng 3: 15+15 =30
Từ tháng 4 trở đi, nó không thực hiện tính toán vì nhận thấy không thỏa điều kiện tháng <=3
* SUMPRODUCT: Xét từng dòng trong cột B, cộng bất chấp thỏa hay không thỏa:
Tháng 1 = (1<=3)*5 = 1*5 = 5
Tháng 2 = 5+(2<=3)*10= 5 + 1*10 = 15
Tháng 3= 15+(3<=3)*15 =15+1*15=30
Tháng 4=30+(4<=3)*20 = 30+0*20=30
Tháng 5=30+(5<=3)*25 = 30+0*25=30
...
Tháng 12=30+(12<=3)*60 = 30+0*60=30
Kết luận: SUMIF thực hiện 3 phép tính, SUMPRODUCT thực hiện 12 phép tính
Với data lớn, vài chục ngàn dòng, sẽ thấy sự khác biệt!!!
View attachment 191278
=SUMIF(B2:B13,"<=300",C2:C13)
=SUMPRODUCT((B2:B13<=300)*C2:C13)