小夥伴們好啊,今天咱們一起來學習一下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)
這個資料表格和前面幾個表格的結構不一樣了,兩個條件分別在行方向和列方向,對於這種結構的表格,計算時有一個小套路,就是分別對比水平和垂直方向的兩個條件,然後乘以數值區域。
這個數值區域的行數,要與垂直方向條件區域的行數一樣,並且列數要與水平方向條件區域的列數一樣。
上面這句話可能不太好理解,其實結合到資料中,就可以看出來了:
數值區域是B2:E12,這裡的行數是2~12行,和(A2:A12="黃瓜")的行數是一樣的。而列數是B:E,和(B1:E1=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返回乘積之和。
好了,今天咱們分享的內容就是這些,祝大家一天好心情!
圖文製作:祝洪忠