Thay Countif trong công thức bằng Sumproduct (1 người xem)

Người dùng đang xem chủ đề này

MeThuongNho

Thành viên thường trực
Tham gia
30/10/09
Bài viết
368
Được thích
77
Nghề nghiệp
Sale - Planning
Dear Anh/Chị,
Em có công thức sau:
SUMPRODUCT(--([dulieu.xlsx]Sheet1!$A$2:$A$500<>"")/COUNTIF([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500&""))
Em muốn thay countif bằng sumproduct hoặc có công thức nào khác thay thế được không ah.
Mục đích:
1. Đếm bỏ qua mã trùng, và rỗng.
2. Và kết quả vẫn chạy khi file nguồn: ( dulieu) đang đóng. ( countif: không chạy khi file đóng).
File đính kèm.
Mong mọi người giúp đỡ.
Cám ơn mọi người nhiều!
 

File đính kèm

Mình tìm được cái hàm thay thế rồi nhưng còn vướn cái điều kiện nữa.
Mong mọi người chỉ giúp.
File update.
Cám ơn mọi người nhiều ah
 

File đính kèm

Dear Anh/Chị,
Em có công thức sau:
SUMPRODUCT(--([dulieu.xlsx]Sheet1!$A$2:$A$500<>"")/COUNTIF([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500&""))
Em muốn thay countif bằng sumproduct hoặc có công thức nào khác thay thế được không ah.
Mục đích:
1. Đếm bỏ qua mã trùng, và rỗng.
2. Và kết quả vẫn chạy khi file nguồn: ( dulieu) đang đóng. ( countif: không chạy khi file đóng).
File đính kèm.
Mong mọi người giúp đỡ.
Cám ơn mọi người nhiều!
Như có lần tôi đã đề cập: Những hàm nào không có khả năng hoạt động với mảng thì sẽ không làm việc được với file đóng (chẳng hạn hàm SUMIF, COUNTIF....)
Vậy bạn có thể thay công thức trên bằng:
Mã:
=COUNT(1/FREQUENCY(MATCH([dulieu.xlsx]Sheet1!$A$2:$A$402,[dulieu.xlsx]Sheet1!$A$2:$A$402,0),MATCH([dulieu.xlsx]Sheet1!$A$2:$A$402,[dulieu.xlsx]Sheet1!$A$2:$A$402,0)))
Hoặc thêm điều kiện loại các cell rổng:
Mã:
=COUNT(1/FREQUENCY(IF([dulieu.xlsx]Sheet1!$A$2:$A$500<>"",MATCH([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500,0)),IF([dulieu.xlsx]Sheet1!$A$2:$A$500<>"",MATCH([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500,0))))
 
Mình tìm được cái hàm thay thế rồi nhưng còn vướn cái điều kiện nữa.
Mong mọi người chỉ giúp.
File update.
Cám ơn mọi người nhiều ah
Đếm không trùng đến 4 điều kiện sẽ dài thế này:
Mã:
=COUNT(1/FREQUENCY(IF(([dulieu.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu.xlsx]Sheet1!$D$2:$D$500=C12),IF([dulieu.xlsx]Sheet1!$C$2:$C$500<>"",MATCH([dulieu.xlsx]Sheet1!$C$2:$C$500,[dulieu.xlsx]Sheet1!$C$2:$C$500,0))),IF(([dulieu.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu.xlsx]Sheet1!$D$2:$D$500=C12),IF([dulieu.xlsx]Sheet1!$C$2:$C$500<>"",MATCH([dulieu.xlsx]Sheet1!$C$2:$C$500,[dulieu.xlsx]Sheet1!$C$2:$C$500,0)))))
Cú pháp tổng quát:
Mã:
=COUNT(1/FREQUENCY(IF(dk1)*(dk2)*(dk3),IF(dữ liệu cần đếm<>"",MATCH(dữ liệu cần đếm, dữ liệu cần đếm, 0))),IF(dk1)*(dk2)*(dk3),IF(dữ liệu cần đếm<>"",MATCH(dữ liệu cần đếm, dữ liệu cần đếm, 0)))))
 
Như có lần tôi đã đề cập: Những hàm nào không có khả năng hoạt động với mảng thì sẽ không làm việc được với file đóng (chẳng hạn hàm SUMIF, COUNTIF....)
Vậy bạn có thể thay công thức trên bằng:
Mã:
=COUNT(1/FREQUENCY(MATCH([dulieu.xlsx]Sheet1!$A$2:$A$402,[dulieu.xlsx]Sheet1!$A$2:$A$402,0),MATCH([dulieu.xlsx]Sheet1!$A$2:$A$402,[dulieu.xlsx]Sheet1!$A$2:$A$402,0)))
Hoặc thêm điều kiện loại các cell rổng:
Mã:
=COUNT(1/FREQUENCY(IF([dulieu.xlsx]Sheet1!$A$2:$A$500<>"",MATCH([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500,0)),IF([dulieu.xlsx]Sheet1!$A$2:$A$500<>"",MATCH([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500,0))))
Cám ơn thầy ndu96081631,
Nhưng bài #4 em có up file mới, có điều kiện nữa , có hàm nào không ạ.
Thân!
 
Đếm không trùng đến 4 điều kiện sẽ dài thế này:
Mã:
=COUNT(1/FREQUENCY(IF(([dulieu.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu.xlsx]Sheet1!$D$2:$D$500=C12),IF([dulieu.xlsx]Sheet1!$C$2:$C$500<>"",MATCH([dulieu.xlsx]Sheet1!$C$2:$C$500,[dulieu.xlsx]Sheet1!$C$2:$C$500,0))),IF(([dulieu.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu.xlsx]Sheet1!$D$2:$D$500=C12),IF([dulieu.xlsx]Sheet1!$C$2:$C$500<>"",MATCH([dulieu.xlsx]Sheet1!$C$2:$C$500,[dulieu.xlsx]Sheet1!$C$2:$C$500,0)))))
Cú pháp tổng quát:
Mã:
=COUNT(1/FREQUENCY(IF(dk1)*(dk2)*(dk3),IF(dữ liệu cần đếm<>"",MATCH(dữ liệu cần đếm, dữ liệu cần đếm, 0))),IF(dk1)*(dk2)*(dk3),IF(dữ liệu cần đếm<>"",MATCH(dữ liệu cần đếm, dữ liệu cần đếm, 0)))))
Dạ, Cám ơn Thầy ndu96081631 nhiều,
Em áp dụng liền tay
Chúc Thầy ngày mới vui vẻ.
 
Dear Anh/Chị,
Em có công thức sau:
SUMPRODUCT(--([dulieu.xlsx]Sheet1!$A$2:$A$500<>"")/COUNTIF([dulieu.xlsx]Sheet1!$A$2:$A$500,[dulieu.xlsx]Sheet1!$A$2:$A$500&""))
Em muốn thay countif bằng sumproduct hoặc có công thức nào khác thay thế được không ah.
Mục đích:
1. Đếm bỏ qua mã trùng, và rỗng.
2. Và kết quả vẫn chạy khi file nguồn: ( dulieu) đang đóng. ( countif: không chạy khi file đóng).
File đính kèm.
Mong mọi người giúp đỡ.
Cám ơn mọi người nhiều!
Theo cách anh NDU nhưng chơi chiêu 1 chút ngắn tí :D, ô C12 trống là loại bỏ dữ liệu trống.
 

File đính kèm

Lần chỉnh sửa cuối:
Mình tìm được cái hàm thay thế rồi nhưng còn vướn cái điều kiện nữa.
Mong mọi người chỉ giúp.
File update.
Cám ơn mọi người nhiều ah
Theo tôi - ý kiến chủ quan thôi, không dám nói là chuẩn mực - bạn không nên dùng phép chia, nhất là chia cho mảng lớn.
Cách 1.
1a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)))>0))

1b. Công thức cho bài cụ thể này
Bạn có 4 điều kiện:
- [dulieu2.xlsx]Sheet1!$A$2:$A$500=C10
- [dulieu2.xlsx]Sheet1!$B$2:$B$500=C11
- [dulieu2.xlsx]Sheet1!$D$2:$D$500=C12
- [dulieu2.xlsx]Sheet1!$C$2:$C$500<>""

và vùng có dữ liệu đếm = [dulieu2.xlsx]Sheet1!$C$2:$C$500

Vậy công thức mảng
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)))>0))

Cách 2. Ngắn gọn hơn nhiều. Nhưng tôi không đảm bảo cho bạn, vì đơn giản tôi chỉ làmk chơi, test có 3 lần. Thường thì tôi ngại test nên chỉ dùng tư duy đánh giá, thấy ổn là thôi.
2a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
ROW(vung_co_du_lieu_dem)-ROW(o_dau_tien_cua_vung_co_du_lieu_dem)+1)>0))

2b. Công thức cho bài cụ thể này. Vùng có dữ liệu đếm và 4 điều kiện như trên.
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),ROW($C$2:$C$500)-ROW($C$2)+1)>0))
 
Theo tôi - ý kiến chủ quan thôi, không dám nói là chuẩn mực - bạn không nên dùng phép chia, nhất là chia cho mảng lớn.
Cách 1.
1a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)))>0))

1b. Công thức cho bài cụ thể này
Bạn có 4 điều kiện:
- [dulieu2.xlsx]Sheet1!$A$2:$A$500=C10
- [dulieu2.xlsx]Sheet1!$B$2:$B$500=C11
- [dulieu2.xlsx]Sheet1!$D$2:$D$500=C12
- [dulieu2.xlsx]Sheet1!$C$2:$C$500<>""

và vùng có dữ liệu đếm = [dulieu2.xlsx]Sheet1!$C$2:$C$500

Vậy công thức mảng
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)))>0))

Cách 2. Ngắn gọn hơn nhiều. Nhưng tôi không đảm bảo cho bạn, vì đơn giản tôi chỉ làmk chơi, test có 3 lần. Thường thì tôi ngại test nên chỉ dùng tư duy đánh giá, thấy ổn là thôi.
2a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
ROW(vung_co_du_lieu_dem)-ROW(o_dau_tien_cua_vung_co_du_lieu_dem)+1)>0))

2b. Công thức cho bài cụ thể này. Vùng có dữ liệu đếm và 4 điều kiện như trên.
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),ROW($C$2:$C$500)-ROW($C$2)+1)>0))
Lần trước em không kiềm chế được, nên có thái độ không tốt mong anh bỏ qua.
Những gì em nói là với bạn kia, chứ anh lớn tuổi sao dám nói anh cù nhầy ... gì đó.
 
Theo tôi - ý kiến chủ quan thôi, không dám nói là chuẩn mực - bạn không nên dùng phép chia, nhất là chia cho mảng lớn.
Cách 1.
1a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)))>0))

1b. Công thức cho bài cụ thể này
Bạn có 4 điều kiện:
- [dulieu2.xlsx]Sheet1!$A$2:$A$500=C10
- [dulieu2.xlsx]Sheet1!$B$2:$B$500=C11
- [dulieu2.xlsx]Sheet1!$D$2:$D$500=C12
- [dulieu2.xlsx]Sheet1!$C$2:$C$500<>""

và vùng có dữ liệu đếm = [dulieu2.xlsx]Sheet1!$C$2:$C$500

Vậy công thức mảng
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)))>0))

Cách 2. Ngắn gọn hơn nhiều. Nhưng tôi không đảm bảo cho bạn, vì đơn giản tôi chỉ làmk chơi, test có 3 lần. Thường thì tôi ngại test nên chỉ dùng tư duy đánh giá, thấy ổn là thôi.
2a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
ROW(vung_co_du_lieu_dem)-ROW(o_dau_tien_cua_vung_co_du_lieu_dem)+1)>0))

2b. Công thức cho bài cụ thể này. Vùng có dữ liệu đếm và 4 điều kiện như trên.
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),ROW($C$2:$C$500)-ROW($C$2)+1)>0))
Cám ơn batman1 nhiều ạ.
Để mình test xem có sai lệch gì không.
Trân trọng!
 
Theo tôi - ý kiến chủ quan thôi, không dám nói là chuẩn mực - bạn không nên dùng phép chia, nhất là chia cho mảng lớn.
Cách 1.
1a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)))>0))

1b. Công thức cho bài cụ thể này
Bạn có 4 điều kiện:
- [dulieu2.xlsx]Sheet1!$A$2:$A$500=C10
- [dulieu2.xlsx]Sheet1!$B$2:$B$500=C11
- [dulieu2.xlsx]Sheet1!$D$2:$D$500=C12
- [dulieu2.xlsx]Sheet1!$C$2:$C$500<>""

và vùng có dữ liệu đếm = [dulieu2.xlsx]Sheet1!$C$2:$C$500

Vậy công thức mảng
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)))>0))

Cách 2. Ngắn gọn hơn nhiều. Nhưng tôi không đảm bảo cho bạn, vì đơn giản tôi chỉ làmk chơi, test có 3 lần. Thường thì tôi ngại test nên chỉ dùng tư duy đánh giá, thấy ổn là thôi.
2a. Công thức mảng tổng quát cho n điều kiện
Mã:
=SUM(--(FREQUENCY(
IF((dk1)*(dk2)*...(dkn),MATCH(vung_co_du_lieu_dem,vung_co_du_lieu_dem,0)),
ROW(vung_co_du_lieu_dem)-ROW(o_dau_tien_cua_vung_co_du_lieu_dem)+1)>0))

2b. Công thức cho bài cụ thể này. Vùng có dữ liệu đếm và 4 điều kiện như trên.
Mã:
=SUM(--(FREQUENCY(IF(([dulieu2.xlsx]Sheet1!$A$2:$A$500=C10)*([dulieu2.xlsx]Sheet1!$B$2:$B$500=C11)*([dulieu2.xlsx]Sheet1!$D$2:$D$500=C12)*([dulieu2.xlsx]Sheet1!$C$2:$C$500<>""),MATCH([dulieu2.xlsx]Sheet1!$C$2:$C$500,[dulieu2.xlsx]Sheet1!$C$2:$C$500,0)),ROW($C$2:$C$500)-ROW($C$2)+1)>0))
Cám ơn batman1
Đã test OK rồi.
 
Lần chỉnh sửa cuối:
Theo cách anh NDU nhưng chơi chiêu 1 chút ngắn tí :D, ô C12 trống là loại bỏ dữ liệu trống.
Theo cách của dazkangel thì cũng hay, nhưng
Dùng hàm MMULT thì cái TRANSPOSE điều kiện ô phải là 1 array liên tục.
Nếu như đk Ca và Máy, và đk rỗng muốn nhập tay thì công thức không áp dụng được.
Tóm lại cám ơn mọi người rất nhiều. Vấn đề đã giải quyết được.
Mình áp dụng Công thức Thầy ndu96081631, sai số chưa thấy sai lệch ở đâu cả ( rất ngon). Mặc dù công thức hơi dài ( do đk nhiều nên dài thôi) .
Chúc mọi người ngày mới vui vẻ
Thân!
 

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

Back
Top Bottom