SUMPRODUCT函式,從字面來理解,SUM是求和,PRODUCT是乘積。綜合到一起,就是 對各個陣列參數計算乘積,並返回乘積之和 。
啥是 陣列 ?咱們就簡單的把它理解成一組數好了,沒啥高科技含量。
接下來,咱們就一起看看這個函式有哪些典型的用法。
1、計算商品總價
如下圖所示,C列是商品單價,D列是商品數量,要計算所有商品的總價,可以使用下面這個公式:
=SUMPRODUCT(C2:C12,D2:D12)
公式把每一行中的單價與數量對應相乘,然後再求和。
計算過程相當於C2*D2+C3*D3+C4*D4……
本例中,也可以將中間的逗號換成乘號:
=SUMPRODUCT(C2:C12*D2:D12)
那這個乘號和逗號啥區別呢?
當求和區域中有文本的時候,在兩個陣列之間使用逗號,會把文本當成0來處理。要是使用乘號的話,如果求和區域中有文本,就返回錯誤值了,既然是文本,你讓小S怎麽乘嘛。
但是使用逗號也是有前提條件的,就是兩個陣列的行、列數必須一樣,否則會返回一個錯誤值。
2、計算指定條件的總價
如下圖所示,要計算部門為「大食堂」的所有商品總價,可以使用以下公式:
=SUMPRODUCT((A2:A12="大食堂")*C2:C12*D2:D12)
這個公式中,先使用(A2:A12="大食堂"),判斷A列的部門是不是等於指定的部門,得到一組由TRUE和FALSE構成的邏輯值。
但是邏輯值不能直接作為陣列參數,但是可以參加四則運算,所以咱們用乘號,分別乘以C列的單價和D列的數量。如果(A2:A12="大食堂")這部份的結果裏是邏輯值TRUE,就相當於1,而邏輯值FALSE的作用就相當於是0。換句話說,符合指定部門的,就用1*單價*數量,不符合指定部門的就用0*單價*數量,最後再將各個乘積進行求和。
3、計算指定月份的總金額
如下圖,要根據A列的日期,計算2月份的總金額。
公式為:
=SUMPRODUCT((MONTH(A2:A12)=2)*1,D2:D12,E2:E12)
MONTH(A2:A12)=2部份,先使用MONTH函式計算出A列日期的月份,然後用等式,判斷是不是等於2,這部份得到的,也是一組由TRUE和FALSE構成的邏輯值。
接下來把邏輯值乘以1,TRUE*1結果為1,FALSE*1結果為0,最終變成由數值1和0構成的新陣列。再用這個新陣列作為參數1,分別與第二參數D2:D12和第三參數E2:E12相乘,最後計算出乘積之和。
也可以直接把各個參數之間的逗號寫成乘號;
=SUMPRODUCT((MONTH(A2:A12)=2)*D2:D12*E2:E12)
4、計算指定月份、指定部門的總金額
如下圖,要計算2月份大食堂的總金額。
公式為:
=SUMPRODUCT((MONTH(A2:A12)=2)*(B2:B12="大食堂"),D2:D12,E2:E12)
公式看起來很長,但是和第三個例子是一樣的,就是多了一個部門的判斷條件(B2:B12="大食堂")。
5、根據兩個條件計算采購量
如下圖,要根據B1:E1單元格中的日期和A2:A12單元格中的品名,來計算對應的采購量。
公式為:
=SUMPRODUCT((B1:E1=1*"2021-2-2")*(A2:A12="黃瓜")*B2:E12)
這個數據表格和前面幾個表格的結構不一樣了,兩個條件分別在行方向和列方向,對於這種結構的表格,計算時有一個小套路,就是分別對比水平胡垂直方向的兩個條件,然後乘以數值區域。
這個數值區域的行數,要與垂直方向條件區域的行數一樣,並且列數要與水平方向條件區域的列數一樣。
上面這句話可能不太好理解,其實結合到數據中,就可以看出來了:
數值區域是B 2 :E 12 ,這裏的行數是 2~12 行,和(A 2 :A 12 ="黃瓜")的行數是一樣的。而列數是 B:E ,和( B 1: E 1=1*"2021-2-2")的列數是一樣的。
另外,在公式中直接寫日期的時候,還要註意,先加上一對半形引號,然後再乘以1變成日期序列值,否則Excel會把2021-2-2當成減法了。
6、同一區域設定多個條件
如下圖所示,要計算2月份白菜和馬鈴薯的總采購量。公式為:
=SUMPRODUCT((MONTH(B1:E1)=2)*((A2:A12="白菜")+(A2:A12="馬鈴薯"))*B2:E12)
(MONTH(B1:E1)=2) 這部份是計算水平方向的月份的。
((A2:A12="白菜")+(A2:A12="馬鈴薯"))這部份,用來判斷垂直方向的商品名稱是不是符合條件。 註意,兩個條件之間使用了加號,計算過程咱們就不細說了,作用是表示二個條件符合其一。
7、帶通配符的求和
如下圖所示,要根據A列的手機型號,統計帶有「摩托羅拉」字樣的手機銷量。
公式 為:
=SUMPRODUCT(ISNUMBER(FIND("摩托羅拉",A2:A12))*B2:B12*C2:C12)
SUMPRODUCT 函式的參數中不支持使用通配符,所以在計算帶有關鍵字的問題,就比較吃虧了。
ISNUMBER(FIND("摩托羅拉",A2:A12))這部份, 先使用FIND函式在 A2:A12 數據區域中尋找關鍵字,如果包含關鍵字,就返回表示關鍵字位置的數值,否則就返回錯誤值。然後使用 ISNUMBER 函式判斷FIND函式的陣列結果是不是數值,如果是數值,說明是包含關鍵字的,如果不是數值,那就是不包含關鍵字了。
ISNUMBER 最終得到由邏輯值TRUE或FALSE構成的記憶體陣列,然後再與後面的第二參數 B2:B12和第三參數C2:C12依次相乘。
最後由SUMPRODUCT返回乘積之和。
好了,今天咱們分享的內容就是這些,祝大家一天好心情!
練手檔在此:
https://pan.baidu.com/s/10oh916zdgR9O4v892Ubp9A
提取碼: rdkh
圖文制作:祝洪忠