作者:iamlaosong
越來越認為sumproduct這個函數實用,過去用sum組函數。改起來復制起來都麻煩,sumif在條件多的時候也認為不方便。
如今改用sumproduct函數,就簡單多了。查過sumproduct函數的用法,其解釋為“求二個或二個以上數組的乘積之和”,假設因此就片面地理解為這與多條件求和無關。那就錯了。事實上呢。利用條件真假的值(“真”相應值為1,“假”相應值為0),sumproduct函數用起來要比sumif函數好用的多。
比如。“=SUMPRODUCT((A1:A100=“project師”)*1)”就統計了A列中含有“project師”的行數。須要注意的是,后面“*1”是不可缺少的。否則結果為零。以下舉幾個應用案例。
1、庫存統計
Excel文件里有三張表,一張入庫記錄,一張出庫記錄,一張庫存記錄。在加入出入庫記錄后。庫存表用sumproduct函數自己主動反應當前庫存。
(1)入庫記錄表A、B、C、D、E、F列
入庫時間 | 單據號 | 零件號 | 貨物數量 | 包裝種類 | 質量狀態 |
2013-06-04 | A1307703 | F114001721 | 72 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001722 | 36 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001723 | 72 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001724 | 48 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001725 | 48 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001726 | 120 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001727 | 48 | 料箱 | 合格 |
2013-06-04 | A1307703 | F114001728 | 24 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001729 | 144 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001730 | 48 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001731 | 48 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001732 | 48 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001733 | 72 | 料箱 | 合格 |
2013-06-04 | A1307708 | F114001734 | 72 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001728 | 144 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001729 | 144 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001730 | 48 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001731 | 48 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001732 | 48 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001733 | 144 | 料箱 | 合格 |
2013-06-04 | A1307714 | F114001734 | 144 | 料箱 | 合格 |
2013-06-04 | A1307719 | F114001735 | 72 | 料箱 | 合格 |
2013-06-04 | A1307719 | F114001736 | 36 | 料箱 | 合格 |
2013-06-04 | A1307719 | F114001737 | 144 | 料箱 | 合格 |
(2)出庫記錄表A、B、C、D、E、F列
出庫時間 | 單據號 | 零件號 | 貨物數量 | 包裝種類 | 質量狀態 |
2013-06-06 | 0000003 | F114001721 | 576 | 料箱 | 合格 |
2013-06-06 | 0000005 | F114001722 | 192 | 料箱 | 合格 |
2013-06-06 | 0000006 | F114001723 | 240 | 料箱 | 合格 |
2013-06-06 | 0000007 | F114001724 | 252 | 料箱 | 合格 |
2013-06-07 | 0000008 | F114001725 | 288 | 料箱 | 合格 |
2013-06-07 | 0000008 | F114001726 | 288 | 料箱 | 合格 |
2013-06-07 | 0000008 | F114001727 | 144 | 料箱 | 合格 |
2013-06-07 | 0000009 | F114001728 | 432 | 料箱 | 合格 |
2013-06-07 | 0000010 | F114001729 | 216 | 料箱 | 合格 |
2013-06-07 | 0000010 | F114001730 | 360 | 料箱 | 合格 |
2013-06-07 | 0000010 | F114001731 | 144 | 料箱 | 合格 |
2013-06-07 | 0000011 | F114001732 | 144 | 料箱 | 合格 |
2013-06-07 | 0000012 | F114001733 | 72 | 料箱 | 合格 |
2013-06-07 | 0000013 | F114001734 | 360 | 料箱 | 合格 |
2013-06-07 | 0000014 | F114001728 | 120 | 料箱 | 合格 |
2013-06-07 | 0000016 | F114001729 | 72 | 料箱 | 合格 |
2013-06-07 | 0000016 | F114001730 | 118 | 料箱 | 合格 |
2013-06-07 | 0000016 | F114001731 | 144 | 料箱 | 合格 |
2013-06-07 | 0000016 | F114001732 | 144 | 料箱 | 合格 |
2013-06-08 | 0000018 | F114001733 | 72 | 料箱 | 合格 |
2013-06-08 | 0000018 | F114001734 | 72 | 料箱 | 合格 |
2013-06-08 | 0000019 | F114001735 | 216 | 料箱 | 合格 |
2013-06-08 | 0000019 | F114001736 | 216 | 料箱 | 合格 |
2013-06-08 | 0000020 | F114001737 | 192 | 料箱 | 合格 |
(3)庫存記錄表A、B、C、D、E、F、G列
零件號 | 貨物名稱 | 包裝種類 | 質量狀態 | 合計入庫 | 合計出庫 | 庫存數量 |
F114001721 | YN3 HousingLH | 料箱 | 合格 | 1116 | 1564 | 72 |
F114001722 | YN3 HousingRH | 料箱 | 合格 | 492 | 1163 | 36 |
F114001723 | YN3 LensLH | 料箱 | 合格 | 668 | 2295 | 72 |
F114001724 | YN3 LensRH | 料箱 | 合格 | 600 | 2183 | 48 |
F114001725 | YP7 HousingLH | 料箱 | 合格 | 312 | 1152 | 48 |
F114001726 | YP7 HousingRH | 料箱 | 合格 | 624 | 926 | 120 |
F114001727 | YP7 LensLH | 料箱 | 合格 | 1008 | 636 | 48 |
F114001728 | YP7 LensRH | 料箱 | 合格 | 600 | 2308 | 24 |
F114001729 | T61 HousingLH | 料箱 | 合格 | 648 | 1352 | 144 |
F114001730 | T61 HousingRH | 料箱 | 合格 | 264 | 1368 | 0 |
F114001731 | T61 LensLH | 料箱 | 合格 | 228 | 954 | 0 |
F114001732 | T61 LensRH | 料箱 | 合格 | 180 | 1480 | 0 |
F114001733 | T63 HousingLH | 料箱 | 合格 | 520 | 1048 | 0 |
F114001734 | T63 HousingRH | 料箱 | 合格 | 444 | 1138 | 0 |
(4)庫存計算公式
合計入庫:=SUMPRODUCT((入庫!$C$2:$C$65535=庫存!$A2)*(入庫!$E$2:$E$65535=庫存!$C2)*(入庫!$F$2:$F$65535=庫存!$D2)*(入庫!$D$2:$D$65535))
合計出庫:=SUMPRODUCT((出庫!$C$2:$C$65535=庫存!$A2)*(出庫!$E$2:$E$65535=庫存!$C2)*(出庫!$F$2:$F$65535=庫存!$D2)*(出庫!$D$2:$D$65535))
公式中每一組數字的條件判定。就會得出不同的“真”與“假”,數組的值變成了不同的“0”和“1”,各組的數字相乘,僅僅有條件全然達到的行。才有可能得到數值。這些數值相加的結果就是我們要求的值。這就是SUMPRODUCT方式的多條件求各和。上述第一個公式能夠描寫敘述為(第二個公式同理):
=SUMPRODUCT((入庫零件號區域=庫存零件號)*(入庫包裝種類區域=庫存包裝種類)*(入庫質量狀態區域=庫存質量狀態)*(入庫數量區域))
庫存數量:=E2-F2
2、每日質量通報
Excel文件里有三張表,一張質量記錄匯總表,一張每日通報,一張累計通報,在加入每天質量記錄后(點擊button。VBA程序自己主動依據P1單元格中的日期從數據庫中提取質量記錄)。每日通報和累計通報用sumproduct函數自己主動反應當前質量情況。改動日期,每日通報和累計通報兩張報表馬上反應當日的質量數據。
(1)質量記錄A、B、C、D、E、F列
投遞日期 | 投遞單位 | 時限情況 | |||
進口郵件數 | 未及時妥投郵件數 | 未妥投郵件數 | 及時妥投率 | ||
2014-9-1 | 合肥市 | 168 | 30 | 7 | 77.98% |
2014-9-1 | 阜陽市 | 44 | 3 | 0 | 93.18% |
2014-9-1 | 蚌埠市 | 40 | 1 | 0 | 97.50% |
2014-9-1 | 蕪湖市 | 103 | 7 | 0 | 93.20% |
2014-9-1 | 安慶市 | 60 | 9 | 0 | 85.00% |
2014-9-1 | 宿州市 | 45 | 4 | 0 | 91.11% |
2014-9-1 | 滁州市 | 73 | 1 | 0 | 98.63% |
2014-9-1 | 六安市 | 52 | 1 | 0 | 98.08% |
2014-9-1 | 黃山市 | 17 | 3 | 0 | 82.35% |
2014-9-1 | 淮北市 | 15 | 1 | 0 | 93.33% |
2014-9-1 | 亳州市 | 34 | 2 | 1 | 91.18% |
2014-9-1 | 淮南市 | 37 | 1 | 1 | 94.59% |
2014-9-1 | 馬鞍山 | 24 | 1 | 0 | 95.83% |
2014-9-1 | 宣城市 | 29 | 3 | 0 | 89.66% |
2014-9-1 | 銅陵市 | 23 | 4 | 0 | 82.61% |
2014-9-1 | 池州市 | 21 | 3 | 0 | 85.71% |
2014-9-2 | 合肥市 | 270 | 109 | 8 | 56.67% |
2014-9-2 | 阜陽市 | 62 | 7 | 0 | 88.71% |
2014-9-2 | 蚌埠市 | 51 | 1 | 0 | 98.04% |
2014-9-2 | 蕪湖市 | 107 | 10 | 0 | 90.65% |
2014-9-2 | 安慶市 | 72 | 5 | 0 | 93.06% |
(2)每日通報A、B、C、D、E、F列
投遞單位 | 時限情況 | |||
進口郵件數 | 未及時妥投郵件數 | 未妥投郵件數 | 及時妥投率 | |
合肥市 | 168 | 30 | 7 | 77.98% |
阜陽市 | 44 | 3 | 0 | 93.18% |
蚌埠市 | 40 | 1 | 0 | 97.50% |
蕪湖市 | 103 | 7 | 0 | 93.20% |
安慶市 | 60 | 9 | 0 | 85.00% |
宿州市 | 45 | 4 | 0 | 91.11% |
滁州市 | 73 | 1 | 0 | 98.63% |
六安市 | 52 | 1 | 0 | 98.08% |
黃山市 | 17 | 3 | 0 | 82.35% |
淮北市 | 15 | 1 | 0 | 93.33% |
亳州市 | 34 | 2 | 1 | 91.18% |
淮南市 | 37 | 1 | 1 | 94.59% |
馬鞍山 | 24 | 1 | 0 | 95.83% |
宣城市 | 29 | 3 | 0 | 89.66% |
銅陵市 | 23 | 4 | 0 | 82.61% |
池州市 | 21 | 3 | 0 | 85.71% |
累 計 | 785 | 74 | 9 | 89.43% |
計算公式(單元格P1存放通報日期):
進口郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!C$4:C$500))
未及時妥投郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!D$4:D$500))
未妥投郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!E$4:E$500))
及時妥投率 :=(B4-C4-D4)/B4
(3)累計通報
內容和每日通報一樣僅僅是數據為當月累計而已,所以各字段公式也幾乎相同,僅僅是多了個小於符號“<”。即:
進口郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500<=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!C$4:C$500))
未及時妥投郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500<=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!D$4:D$500))
未妥投郵件數:=SUMPRODUCT((數據匯總!$A$4:$A$500<=$P$1)*(數據匯總!$B$4:$B$500=$A4)*(數據匯總!E$4:E$500))
及時妥投率 :=(B4-C4-D4)/B4