Có thể phân tích hàm Sumproduct theo logic 0(Fasle) - 1(true) thì sẽ dễ hiểu hơn chăng ?Vâng ví dụ của anh Adam rất hay nhưng cũng cần phải nói rõ hơn cho mọi người hiểu ở cái chổ điều kiện > * < + =... để mọi người hiểu những điều kiện được lập chứ một cục như thế thì không có nhiều người mới có thể hiểu được công dụng tuyệt với của hàm này.
Nghĩa là sao ? 30 vòng ngoặc ? Cũng giống hàm IF hay công thức mảng, phải sử dụng nhiều vòng ngoặc, nếu lớn 30 vòng ngoặc thì có thể hàm này chịu thua, và dĩ nhiên, mỗi hàm đều có những ưu và nhược điểm riêng, tuy vậy, hàm DSUM không tiện dụng với người KT hơn hàm SUMPRODUCT đâu.HongViet nói:Nếu mãng của bạn >30 thì hàm này chịu thua, phải không?
Lúc đó sẽ ra răng???
Lúc đó Hàm =DSUM() sẽ chiếm lĩnh trận địa!
(Thử đi; Nói thì nói vậy thôi chứ mình chưa lên đến đó bao giờ!)
HongViet nói:Nếu mãng của bạn >30 thì hàm này chịu thua, phải không?
Lúc đó sẽ ra răng???
Lúc đó Hàm =DSUM() sẽ chiếm lĩnh trận địa!
(Thử đi; Nói thì nói vậy thôi chứ mình chưa lên đến đó bao giờ!)
handung107 nói:Sửa công thức của adam tran chút xíu nhé :
Tại Sheet TongHop, Cell B12, công thức của adam_tran là :
=(SUMPRODUCT((Ngay<C7)*(MaHH=D7)*(Loai="N")*(Tien))-SUMPRODUCT(((Ngay<C7)*(MaHH=D7)*(Loai="X")*(Tien))))/(SUMPRODUCT((Ngay<C7)*(MaHH=D7)*(Loai="N")*(SoLuong))-SUMPRODUCT(((Ngay<C7)*(MaHH=D7)*(Loai="X")*(SoLuong))))
Chị sửa lại cho gọn như sau :
=SUMPRODUCT((Ngay<C7)*(MaHH=D7)*((Loai="N")-(Loai="X"))*(Tien))/SUMPRODUCT((Ngay<C7)*(MaHH=D7)*((Loai="N")-(Loai="X"))*(SoLuong))
So với công thức mảng :
{=SUM(IF(MaHH=D7,IF(Ngay<C7,IF(Loai="N",Tien,-Tien))))/SUM(IF(MaHH=D7,IF(Ngay<C7,IF(Loai="N",SoLuong,-SoLuong))))}
Hàm SUMPRODUCT không dài hơn đâu, ngược lại dễ sử dụng hơn và chạy nhanh hơn nhé
Á.... càng học càng thấy mình biết ít!handung107 nói:Còn có thể gọn hơn nữa, adam_tran này :
=SUMPRODUCT((Ngay<C7)*(MaHH=D7)*((Loai="N")-(Loai="X"))*(Tien/SoLuong))
Thật tuyệt vời, phải không em ?
Có lẽ bây giờ nhiều bạn sẽ à một tiếng rằng sao công thức tính giá xuất bình quân gia quyền liên hoàn lại đơn giản và dễ thế!handung107 nói:=SUMPRODUCT((Ngay<C7)*(MaHH=D7)*((Loai="N")-(Loai="X"))*(Tien/SoLuong))
Cũng vậy, công thức mảng sẽ sửa gọn lại như sau :
{=SUM(IF(MaHH=D7,IF(Ngay<C7,IF(Loai="N",Tien/SoLuong,-Tien/SoLuong))))}
hehe thế là mình không cần đổi nick cũng có thể nằm trong diện được quyền làm bài tập này rồi. Mà anh Adam trần vẫn chưa gọi chị Dung là "Đại sư mẫu" ah!Chú ý: Bài tập này không dành cho Đại sư tỷ handung107 và các Mod.
Em chưa thử nhưng nếu công thức tính giá xuất bình quân gia quyền liên hoàn hoạt động được thì anh có thể giải thích giúp em xem tại sao sử dụng Sumproduct lại không tạo ra tham chiếu vòng ạ???Trích:
Nguyên văn bởi handung107
=SUMPRODUCT((Ngay<C7)*(MaHH=D7)*((Loai="N")-(Loai="X"))*(Tien/SoLuong))
Cũng vậy, công thức mảng sẽ sửa gọn lại như sau :
{=SUM(IF(MaHH=D7,IF(Ngay<C7,IF(Loai="N",Tien/SoLuong,-Tien/SoLuong))))}
Có lẽ bây giờ nhiều bạn sẽ à một tiếng rằng sao công thức tính giá xuất bình quân gia quyền liên hoàn lại đơn giản và dễ thế!
Không hiểu "tham chiếu vòng"? là 2 cái ngoặc 2 đầu?WhoamI nói:tại sao sử dụng Sumproduct lại không tạo ra tham chiếu vòng ạ???
Gọi bác Duyệt béo là sư phụ rồi, gọi chị handung là sư mẫu thì... :biggrin: lộn xộn.Mà anh Adam trần vẫn chưa gọi chị Dung là "Đại sư mẫu" ah!
Là cái CircularReference ấy. Có nghĩa là kết qủa của cái này là dữ liệu của cái kia ...thành ra 1 vòng luẩn quẩn...sẽ tạo ra lỗi CircularReference.adam_tran nói:Không hiểu "tham chiếu vòng"? là 2 cái ngoặc 2 đầu?
adam_tran nói:Mình đã quá chủ quan khi nói rằng SUMPRODUCT không tổng hợp được điều kiện OR. Hôm qua sau khi tìm hiểu công thức của chị handung, mình thấy điều này hoàn toàn được, và cách làm cũng rất đơn giản.
Để các bạn có thể hiểu kỹ hơn về SUMPRODUCT, mình để các bạn tự tìm hiểu thử, xem như là một bài tập vậy. Từ file ví dụ của mình, bài tập như sau (dùng SUMPRODUCT, chỉ dùng 1 hàm SUMPRODUCT và hàm RIGHT):
1. Tổng hợp doanh số bán của tất cả các mặt hàng có mã 01, 03 và 05, trước ngày 10/11 và sau ngày 20/11.
Chú ý: Bài tập này không dành cho Đại sư tỷ handung107 và các Mod.
Còn thiếu "tien" bác ạh! Công thức này mới chỉ cộng các điều kiện true (1) thôi.Longlv nói:Tôi xin đưa ra công thức, có gì sai mọi người sửa giúp nhé :
=SUMPRODUCT(((RIGHT(MaHH,2)="01")+(RIGHT(MaHH,2)="02")+(RIGHT(MaHH,2)="03"))*((Ngay<DATEVALUE("10/10/05"))+(Ngay>DATEVALUE("20/10/05"))))
Ai dám treo giải đâu, cái này đâu có khó, treo giải rồi quà đâu mà phát :biggrin: Longlv giải xong rồi đấy.NguyênBình nói:Treo giải đi anh Adam ơi! Để em lấy nick khác nhận giải cái :biggrin:
Hiểu ý WhoAmI rồi. Tất nhiên khi lập công thức tính giá bình quân thì không dùng Name, mà dùng địa chỉ thực trong đó, cố định 1 ô đầu.Là cái CircularReference ấy. Có nghĩa là kết qủa của cái này là dữ liệu của cái kia ...thành ra 1 vòng luẩn quẩn...sẽ tạo ra lỗi CircularReference.