首頁>職場>

之前的文章,按年度、月度統計,用上了SUMPRODUCT函式,今天就來好好的剖析一下這給函式。

SUMPRODUCT函式是在給定的幾組陣列中,將陣列間對應的元素相乘,並返回乘積之和。語法如下:SUMPRODUCT(array1, [array2], [array3], ...)

其中array1 是必須的引數,[array2], [array3], ...為可選引數。

1.簡單的例子,說明一下SUMPRODUCT函式的用法。

上圖是一個非常簡單的表格,要算出銷售的總額,只需要 銷售單價*銷售數量就可以。合計再用SUM函式,彙總一下銷售總額。結果就如D14所示,如果用SUMPRODUCT函式,就可以直接利用銷售單價和銷售數量直接計算出總價。具體公式為:=SUMPRODUCT(B2:B13,C2:C13)。結果如D15所示。

2:大多數錯誤的原因

很多小夥伴們用這個函式的時候,經常會得到錯誤值,大多數是因為區域的大小選擇不一致。如果把上面的例子。公式變成=SUMPRODUCT(B2:B13,C2:C12) 那麼得出的結果就是:

那是因為,B2:B13這給陣列包含了12個數據,而C2:C12僅包含了11個數據,那麼最終的結果就是報錯。

3:另外一種常見的寫法,逗號(,)變乘號(*)

就本篇列舉的例子來說,如果=SUMPRODUCT(B2:B13,C2:C13)變成=SUMPRODUCT(B2:B13*C2:C13)可以看到計算的結果是一致的。那麼就會帶來一給新的問題,他們有什麼區別?

4:逗號(,)變乘號(*)的差別

雖然只是將公式裡的逗號變成了乘號,但是公式的意義發生了變化。第一個公式=SUMPRODUCT(B2:B13,C2:C13)有兩個引數。而第二個公式=SUMPRODUCT(B2:B13*C2:C13)只有一個引數。(判斷有幾個引數,就看是否用逗號去分割開)。第一個公式中,兩個區域相乘這一步是由函式來完成的,函式做了兩件事,先讓兩個區域的資料對應相乘,再把乘積相加。在第二個公式中,兩個區域相乘是由陣列計算來完成的,函式只做了一件事,就是把乘積值相加。

那麼意義何在呢?

我們還是透過例子來說明。

在上圖這個公式中用的是逗號(,),有兩個獨立的引數。SUMPRODUCT函式首先讓兩組資料對應相乘,相乘的時候會檢查資料並把非數值型資料作為0處理,然後再把乘積相加。因此,B1"銷售單價"和C1"銷售數量"會當成0來處理,公式可以得到正確結果。

當我們把逗號換成*號後,公式結果錯誤。為什麼呢?SUMPRODUCT函式這時只負責把乘積相加。引數B1:B13*C1:C13是陣列乘法運算,因為計算的區域中包含了文字(文字是不能進行乘法運算的),所以在這個陣列的計算結果裡就有錯誤值了。

5:SUMPRODUCT用乘號(*)的要點

以上內容所要表達的意思有兩點:

第一、使用逗號和使用乘號(*)有時候結果相同,但是意義完全不一樣,希望大家可以理解。

第二、SUMPRODUCT函式使用乘號(*)必須要注意兩點:1.不能存在無法計算的內容,如文字。2,如果是兩組或多組陣列相乘的話,資料區域大小一致。用逗號則只需要保證資料區域大小一致即可。

6.其實i乘號(*)還帶來了更大的優勢

我們把SUMPRODUCT函式逗號、乘號前後的資料用A、B來代替,表達為SUMPRODUCT (A,B)和SUMPRODUCT (A*B)。當為逗號時,A、B必須同時都是數值或者陣列,不能一個是數值,一個是陣列;當為乘號時,A、B可以同時都是數值或者陣列,也可以一個是數值一個是陣列。以下SUMPRODUCT函式都是正確的格式。SUMPRODUCT (C1,B1);SUMPRODUCT (C1*B1);SUMPRODUCT (C1:C9,D1:D9),SUMPRODUCT (C1:C9*D1:D9),SUMPRODUCT (C1:C9*D1),因此,用乘號擴大了SUMPRODUCT函式的應用。你即將在下面看到的都是用SUMPRODUCT函式用乘號(*)的應用。

7:看得懂這些SUMPRODUCT公式嗎?

如果明白了上面的內容,說明對於這個函式的基本用法是沒問題了。可是很可能很多SUMPRODUCT公式你還是看不懂,比如這種:

這實際上是一個條件計數的問題,再看這個:

這是一個多條件求和問題。

在這幾個表,幾乎各種 統計問題都可以用SUMPRODUCT函式去解決,不再一一列舉。僅僅是上面連個例子,加上之前案例裡面使用的SUMPRODUCT函式,希望各個小夥伴,都能理解並能運用。

如果你還不能完全理解SUMPRODUCT函式的用法,原因就是你還不瞭解這兩個知識點:邏輯值和陣列。

8。瞭解一點邏輯值和陣列。

先來說說邏輯值,邏輯值只有兩個,就是TRUE和FALSE。當我們再公式裡面進行某種比較或這判斷的時候,就會產生邏輯值,以=SUMPRODUCT((A2:A13="張三")*1)為例,其中,A2:A13="張三"就是一個判斷。通常情況下,我們以單元格去做判斷。A2="張三"的意思就是判斷A2單元格內容是否為"張三"。如果是則得到TRUE,反之得到FALSE。當我們使用了一個區域去判斷的時候,就會得到一組資料,這其實就是一個數組。例如A2:A13="張三"就會得到一組邏輯值,可以用F9來看看計算結果。

因為邏輯值無法直接進行求和,必須轉換為數字才行,轉換的方法就是對邏輯值進行加減乘除之一的任何運算即可。在這給公式中,*1就是這給作用。可以看看效果。

透過*1運算之後,TRUE都變成了1,而FALSE都變成了0。不要問我為什麼,Excel就是這麼規定的,邏輯值與數字的對應關係就是這個。

好了,我們首先得到一組邏輯值,然後透過*1變成一組數字,再進行求和,就達到了按條件計數的目的。你現在是否已經理解了=SUMPRODUCT((A2:A13="張三")*1)這個公式呢?現在我們瞭解到邏輯值,也明白了陣列運算的第一個原則:當一組數與一個數進行計算時,是這組數中的每個資料分別與這一個數進行計算。剛才的公式中就是這樣計算的。

21
  • 工作沒回報,還要繼續嗎?
  • 員工提出離職,老闆:“你今天走,明天排長隊有人幹”,結局打臉