Sử dụng công thức nào để tổng hợp độ tuổi

  • Thread starter Thread starter nhatthai
  • Ngày gửi Ngày gửi
Liên hệ QC

nhatthai

Thành viên thường trực
Tham gia
16/7/07
Bài viết
221
Được thích
132
Nghề nghiệp
Quản lý dạy nghề
Cac bac giup toi voi : Toi dang thuc hien tong hop do tuoi nhung khong biet su dung cong thuc nao de tong hop do tuoi tu cot ngay thang nam sinh ma khong dung cot phu.
Xin cam on
------------------------
Vi toi thuc hien o quan net, khong co trinh go tieng Viet nen khong bo duoc dau. Mong BQT dung xoa bai cua toi

Bạn hãy sửa lại Tiếng Việt có dấu !
 

File đính kèm

Bạn xem có đúng với ý của bạn không nhé
=SUM(IF(YEAR(C3:C37)=2001,1,0))
 

File đính kèm

Lần chỉnh sửa cuối:
Xin thêm là công thức của DOSNET nhanh hơn của duongdv khi có dữ liệu lớn.
 
Mã:
{=COUNT(IF(YEAR($C$3:$C$3000)=RIGHT(E5,4)*1,0))}
Có bốn dòng công thức thì nhanh hay chậm có đáng gì đâu Các Bác.
 
Bài toán này không khó, nhưng nếu nói về tốc độ thì chắc SUMPRODUCT không thể nào = được với SUMIF và COUNTIF
Vậy đố các bạn làm được nó bằng COUNTIF mà không đặt name, không cột phụ đấy (nếu làm được thì đương nhiên tốc độ là nhanh nhất rồi)
Trường hợp này SUMIF không xơi được bác ơi, bài này SUMPRODUCT chậm hơn {SUM(IF..)} một tý, nhưng lại đỡ phải Ctrl+Sh+enter. Vẫn sử dụng công thức mảng, kiểm tra điều kiện,Sumproduct sử dụng phép nhân sau đó cộng lại, {SUM(IF..)} thì cộng luôn.
- Countif có sử dụng mảng ko bác ?
 
Nếu dùng mãng thì chẳng hóa ra cũng là biến tấu của SUMPRODUCT rồi (vì bản thân SUMPRODUCT là công thức mãng)
Tôi nói COUNTIF là công thức bình thường, không Ctrl + Shift + Enter gì cả! Thế mới gọi là tốc độ chứ

Tôi xin gợi ý 1 chút: Tôi dùng COUNTIF dựa trên đặc điểm sau đây của ngày tháng:
Ngày 1/1/2001 = 36892
Ngày 1/1/2002 = 37257
Ngày 1/1/2003 = 37622
Ngày 1/1/2004 = 37987

Các bạn nghiên cứu 1 tí là ra ngay! (COUNTIF(Vung,">=.....") ... )
Tôi đưa lên câu hỏi này không nhằm mục đích giãi bài toán của tác giả, chỉ hy vọng trong 1 dịp nào đó các bạn sẽ áp dụng nó để cải thiện tốc độ tính toán trên file có dử liệu lớn hơn
 
Chỉnh sửa lần cuối bởi điều hành viên:
Hiểu ý bác rồi...ý tưởng khá hay ! Tất cả quy về con số và đếm những ô trong khoảng thỏa mãn điều kiện ! Thanks
 
Tại ô F5 :
=COUNTIF($C$3:$C$37,"<"&DATE(2000+ROW(2:2),1,1))-SUM($F$4:F4)

To: hoangdanh282vn
Công thức trên có đoạn -SUM($F$4:F4), xin cho hỏi ý nghĩa của đoạn này là gì. Vì theo mình thì không cần thiết.

Công thức này đếm số ngày sinh có số năm nhỏ hơn một năm nào đó chứ không phải đếm cụ thể cho một năm phải không?

To mọi người:
Có thể so sánh được ba công thức sau, cái nào nhanh nhất không (xét trong cùng 1 điều kiện năm 2001:
Mã:
Cách 1 = COUNT(IF(YEAR(C3:C37)=2001,1,""))
Cách 2 = SUMPRODUCT(--(YEAR(C3:C37)=2001))
Cách 3 = SUM(IF(YEAR(C3:C37)=2001,1,0))
 
=COUNTIF($C$3:$C$37,">="&DATE(200X,1,1))-COUNTIF($C$3:$C$37,">="&DATE(200X+1,1,1))
Sao làm vậy dễ hiểu hơn không.
 
To: hoangdanh282vn
Công thức trên có đoạn -SUM($F$4:F4), xin cho hỏi ý nghĩa của đoạn này là gì. Vì theo mình thì không cần thiết.

Công thức này đếm số ngày sinh có số năm nhỏ hơn một năm nào đó chứ không phải đếm cụ thể cho một năm phải không?

Công thức của em với công thức của Bác Thu Nghi chỉ là một mà thôi, chỉ khác ở chổ dùng hàm minh họa. Nhưng của em thì ngắn hơn và nhanh hơn một tí vì không phải đếm hai lần, một tí nhưng hoi khó hiểu hơn nhỉ.
To mọi người:
Có thể so sánh được ba công thức sau, cái nào nhanh nhất không (xét trong cùng 1 điều kiện năm 2001:

Code:
Cách 1 = COUNT(IF(YEAR(C3:C37)=2001,1,""))
Cách 2 = SUMPRODUCT(--(YEAR(C3:C37)=2001))
Cách 3 = SUM(IF(YEAR(C3:C37)=2001,1,0))
Theo em thì cái này nhanh nhất vì hàm sum đã được tích hợp sẵn trong khi so sánh.
 
Lần chỉnh sửa cuối:
Tôi thì dùng COUNTIF nhưng sửa lại dử liệu gốc 1 chút:
E5 = 1/1/2001
....
E8 = 1/1/2004
Vậy thì:
F5 =COUNTIF($C$3:$C$37,">="&E5)-SUM(F6:$F$9)
Công thức này ra kết quả sai, nhưng kéo fill xuống sẽ đúng
(không có tí mãng nào trong này cả)
 
Theo em thì cái này nhanh nhất vì hàm sum đã được tích hợp sẵn trong khi so sánh.
Mình thì hiểu ngược lại với Hoangdanh, Sumproduct có lẽ sẽ chậm nhất vì thực hiện nhiều phép tính hơn Sum(if...)Count(if...). Sumproduct trong trường hợp này phải kiểm tra kết quả trong mảng, sau đó phải nhân với 1cộng các phép tính nhân lại mới ra kết quả.
 
Mình thì hiểu ngược lại với Hoangdanh, Sumproduct có lẽ sẽ chậm nhất vì thực hiện nhiều phép tính hơn Sum(if...)Count(if...). Sumproduct trong trường hợp này phải kiểm tra kết quả trong mảng, sau đó phải nhân với 1cộng các phép tính nhân lại mới ra kết quả.

Em làm một VD mô phỏng hàm SUMIF để test, với 50.000 dòng dữ liệu, tính toán cho 1000 dòng, sau mỗi lần thay đổi tham số thì kết quả như sau :
SUMIF : 7.80s
Sumproduct(--dk,vùng tính tổng) : 26.70s
Sum(if(..)) : 27.80s
Sumproduct(dk*vùng tính tổng) : 28.25s
 

File đính kèm

- Mình làm thí nghiệm kết quả ra tương tự.
Sumproduct(dk*vùng..) chậm nhất, chắc chắn phải qua các bước như mình đã đề cập
Chưa hiểu ngọn ngành tại sao Sumproduct(--dk,..) lại cải thiện đc tốc độ hơn !
 
Web KT

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

Back
Top Bottom