1. 程式人生 > >SUMPRODUCT函式的四種用法

SUMPRODUCT函式的四種用法

SUMPRODUCT函式

  在給定的幾組陣列中,將陣列間對應的元素相乘,並返回乘積之和。

語法

  SUMPRODUCT(array1,array2,array3, ...)   Array1,array2,array3, ... 為 2 到 30 個數組,其相應元素需要進行相乘並求和。

說明

  · 陣列引數必須具有相同的維數,否則,函式 SUMPRODUCT 將返回錯誤值 #VALUE!。   · 函式 SUMPRODUCT 將非數值型的陣列元素作為 0 處理。

示例

  
B C D E
1 Array1 Array1 Array2 Array2
2 3 4 2 7
3 8 6 6 7
4 1 9 5 3
公式 說明(結果)
=SUMPRODUCT(B2:C4*D2:E4) 兩個陣列的所有元素對應相乘,然後把乘積相加,即3*2+4*7+8*6+6*7+1*5+9*3。(156)
 數學函式SUMPRODUCT應用例項   一、基本功能   1.函式SUMPRODUCT的功能返回相應的區域或陣列乘積的和。   2.基本格式SUMPRODUCT(資料1,資料2,……,資料30)        3.示例資料表        

A B C D E

資料1資料2資料3資料4資料5

2 3 4 12 10

5 5 6 5 20

9 7 8 #N/A 30

7 2 7 9 KL

1 6 2 8 2

  ⑴基本計算   ①區域計算要求:計算A、B、C三列對應資料乘積的和。公式:=SUMPRODUCT(A2:A6,B2:B6,C2:C6)計算方式:=A2*B2*C2+A3*B3*C3+A4*B4*C4+A5*B5*C5+A6*B6*C6即三個區域A2:A6,B2:B6,C2:C6同行資料積的和。返回值788。   ②陣列計算要求:把上面資料表中的三個區域A2:A6,B2:B6,C2:C6資料按一個區域一個數組,計算對應陣列積的和。把A2:A6,B2:B6,C2:C6分別作為一個數組,即A2:A6表示為陣列-{2;5;9;7;1}B2:B6表示為陣列-{3;5;7;2;6}C2:C6表示為陣列-{4;6;8;7;2}公式:   =SUMPRODUCT({2;5;9;7;1},{3;5;7;2;6},{4;6;8;7;2})   =788   注意:陣列資料用大括號{}括起來。行資料之間用分號";"分隔,如果是同一行的資料,用逗號","分隔。   ⑵可能出現的錯誤   ①編輯公式時,引用的資料區域大小不一致導致計算錯誤,返回值為#VALUE!。示例:在上面的資料表中,計算A列與B列資料區域積的和。公式:   =SUMPRODUCT(A2:A6,B2:B5)   或   =SUMPRODUCT(A2:A6,B2:B8)   都會返回錯誤值#VALUE!。所以在用SUMPRODUCT函式時,引用的資料區域大小要一致。   ②資料區域中有錯誤值時,計算出現錯誤值。示例:在上面的資料表中,計算資料區域A2:A6與D2:D6對應積的和。公式:   =SUMPRODUCT(A2:A6,D2:D6)   因為D2:D6中有錯誤值#N/A,所以公式返回值為錯誤值#N/A。   ③資料區域引用不能整列引用。示例:計算上面資料表中A2:A6和B2:B6區域對應資料積的和,正確公式為=SUMPRODUCT(A2:A6,B2:B6)則返回正確的計算值94。如果用公式   =SUMPRODUCT(A:A,B:B)   則返回錯誤值#NUM!。   ④資料區域有文字,計算中系統預設文字值為0。示例:在上面資料表中,計算A2:A6和E2:E6區域中對應資料積的和。公式   =SUMPRODUCT(A2:A6,E2:E6)   返回值是392,其中E5是文字KL,則A5*E5=0。   二、用於多條件計數用數學函式SUMPRODUCT計算符合2個及以上條件的資料個數   ⑴資料表如下資料表所示:
A B C
1 姓名 性別 職稱
2 A 中一
3 B 中二
4 C 中一
5 D 中一
6 E 中一
7 F 中二
8 G 中二
9 H 中一
10 I 中一
11 J 中一
 統計表E列 F列 G列中一 中二男女要求:統計上面資料表中男、女性中分別是中一、中二的人數。如下圖片,A1:C11資料區域,在E1:G3區域統計男、女中中一和中二的人數是多少。 計算結果

計算結果

⑵公式在資料統計區域中的F2單元格編輯如下公式:   =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))   向下複製到F3,向右複製到G3。   ⑶公式分解及分析   ①條件1——$B$2:$B$11=$E2在計算過程中,條件1是一個數組,返回多值,寫成公式如下:=$B$2:$B$11=$E2具體操作:選中10個連續的單元格,輸入上述公式後,按Ctrl+Shift+回車鍵確認,返回10個邏輯判斷值——TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE。這10個邏輯判斷值構成一個新的由TRUE主FALSE組成的陣列1。   ②條件2——$C$2:$C$11=F$1與條件1相同,是一個數組,返回多值,寫成公式如下:=$C$2:$C$11=F$1具體操作:同樣的方法,選中對應的10連續單元格,輸入上述公式,按Ctrl+Shift+回車鍵確認,返回10個邏輯判斷值——TRUE;FALSE;TRUE;TRUE;TRUE;FALSE; FALSE;TRUE; TRUE;TRUE。這10個邏輯判斷值構成另一個新的由TRUE主FALSE組成的陣列2。   ③($B$2:$B$11=$E2)*($C$2:$C$11=F$1)由新構成的陣列1乘以陣列2,即:   =($B$2:$B$11=$E2)*($C$2:$C$11=F$1)   ={陣列1*陣列2}   ={ TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE }*{ TRUE;FALSE;TRUE;TRUE;TRUE;FALSE; FALSE;TRUE; TRUE;TRUE }   ={TRUE*TRUE;FALSE*FALSE;FALSE*TRUE;TRUE*TRUE;FALSE*TRUE;TRUE*FALSE; FALSE*FALSE;TRUE*TRUE;TRUE*TRUE; FALSE*TRUE}   ={1;0;0;1;0;0;0;1;1;0}   其中,邏輯值TRUE與FALSE參與計算時:   TRUE=1,FALSE=0,TRUE*TRUE=1,TRUE*FALSE=FALSE*TRUE=0,FALSE*FALSE=0   因此{陣列1*陣列2}={1;0;0;1;0;0;0;1;1;0}由1和0構成了一個新的陣列3。   ④=SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))   函式SUMPRODUCT對新的陣列3中的所有資料求和。即:   =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))=SUMPRODUCT({陣列1*陣列2})   =SUMPRODUCT({陣列3})   =SUMPRODUCT({1;0;0;1;0;0;0;1;1;0})   =4   這裡需要說明的是,公式編輯按照函式SUMPRODUCT的一般格式,可以編輯如下等效的公式:   =SUMPRODUCT(($B$2:$B$11=$E2)*1,($C$2:$C$11=F$1)*1)   函式SUMPRODUCT的作用是對陣列($B$2:$B$11=$E2)與陣列($C$2:$C$11=F$1))計算其乘積的和,即:   =SUMPRODUCT(($B$2:$B$11=$E2)*1,($C$2:$C$11=F$1)*1)   =SUMPRODUCT({ TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE }*1,{ TRUE;FALSE;TRUE;TRUE;TRUE;FALSE; FALSE;TRUE; TRUE;TRUE }*1)   =SUMPRODUCT({1;0;0;1;0;1;0;1;1;0},{1;0;1;1;1;0;0;1;1;1})   =SUMPRODUCT({1*1;0*0;0*1;1*1;0*1;1*0;0*0;1*1;1*1,0*1})   =SUMPRODUCT({1;0;0;1;0;0;0;1;1,0})   =4   注意:TRUE*1=1,FALSE*1=1*FALSE=0,TRUE*0=0*TRUE=0 。陣列中用分號分隔,表示陣列是一列陣列,分號相當於換行。兩個陣列相乘是同一行的對應兩個數相乘。   三、用於多條件求和對於計算符合某一個條件的資料求和,可以用SUMIF函式來解決。如果要計算符合2個以上條件的資料求和,用SUMIF函式就不能夠完成了。這就可以用函式SUMPRODUCT。   用函式SUMPRODUCT計算符合多條件的資料和,其基本格式是:SUMPRODUCT(條件1*條件2*……,求和資料區域)   資料表
A B C D
1 姓名 性別 職稱 課時
2 A 中一 15
3 B 中二 16
4 C 中一 14
5 D 中一 13
6 E 中一 18
7 F 中二 15
8 G 中二 16
9 H 中一 14
10 I 中一 17
11 J 中一 18
 要求:計算男、女分別是中一或中二的總課時數。   統計表F列 G列 H列 中一 中二男女在G2中編輯公式   =SUMPRODUCT(($B$2:$B$11=$F2)*($C$2:$C$11=G$1),$D$2:$D$11)   回車確認後向下向右複製公式到H3單元格。   公式釋義:性別區域$B$2:$B$11中滿足條件男和職稱區域$C$2:$C$11中滿足條件中一的資料,通過判斷計算後由1和0組成一個新的資料區域,這個新的資料區域再和課時區域$D$2:$D$11中的對應資料相乘後求和。   公式對比:到此,對函式SUMPRODUCT用來計數和求和,試作一對比   計數公式   =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))   求和公式   =SUMPRODUCT(($B$2:$B$11=$F2)*($C$2:$C$11=G$1),$D$2:$D$11)   不難看出,求和公式在原來的計數公式中,在相同判斷條件下,增加了一個求和的資料區域。也就是說,用函式SUMPRODUCT求和,函式需要的引數一個是進行判斷的條件,另一個是用來求和的資料區域。   四、用於排名次如下A列資料:A列 B列資料 名次56658965567890526090需要排出區域A2:A11中10個數據的名次。在B2中編輯公式:   =SUMPRODUCT((A2<$A$2:$A$11)*1)+1   向下複製到單元格B11。   公式釋義:用A2到$A$2:$A$11(用絕對引用$保證公式在向下複製時整個資料區域不發生變化)中進行比較,當A2<$A$2:$A$11成立時,則返回TRUE;如果A2<$A$2:$A$11不成立就返回FALSE。所以陣列公式=A2<$A$2:$A$11返回一個由TRUE和FALSE構成的邏輯陣列。把陣列公式=A2<$A$2:$A$11構成的邏輯陣列乘1,得到一個由0和1構成的新陣列。SUMPRODUCT再對由0和1構成的新陣列求和,表示在資料區域$A$2:$A$11中比A2大的資料個數。所以A2在資料區域$A$2:$A$11內排列的位次應該是比A2大的資料個數+1,即公式=資料區域$A$2:$A$11內比A2大的個數+1   =SUMPRODUCT((A2<$A$2:$A$11)*1)+1   公式向下複製,則依次對$A$2:$A$11中每一個數據重複進行上述判斷求和,從而排出資料區域$A$2:$A$11中每一個數據的位次。很顯然,對於資料區域$A$2:$A$11中相同的數,判斷和計算結果是相同的,也就是排出來的位次相同。所以用SUMPRODUCT函式排出來的名次,與直接用RANK函式排出來的名次是一樣的,有重複名次,但最大位次數不超過資料區域$A$2:$A$11中的總資料個數。   如果希望排出的位次沒有重複,而資料區域$A$2:$A$11中相同資料的位次按資料出現的先後順序排位,可以用下面的公式:   =SUMPRODUCT((A2<$A$2:$A$11)*1)+COUNTIF($A$2:A2,A2)   公式向下複製即可。兩種排名對比如下表所示:A列 B列 C列資料 名次重複順序名次56 8 865 5 589 3 365 5 656 8 978 4 490 1 152 10 1060 7 790 1 2   綜上所述,對於多條件的計數或者求和,可以用數學函式SUMPRODUCT來比較方便的解決。在使用函式時,進行資料引用的單元格區域或陣列應該大小一致,不能採取整列引用(形如A:A)。如果跨表使用函式SUMPRODUCT,與其它函式跨表引用資料一樣,資料區域前面應該標明工作表名稱。[color=#EE1D24,strength=3);]計數公式中最關鍵的是確定計數的判斷條件。[color=#EE1D24,strength=3);]求和公式在原來的計數公式中,在相同判斷條件下增加了一個求和的資料區域。[color=#EE1D24,strength=3);]用函式SUMPRODUCT求和,函式需要的引數一個是進行判斷的條件,另一個是用來求和的資料區域。

相關推薦

SUMPRODUCT函式用法

SUMPRODUCT函式   在給定的幾組陣列中,將陣列間對應的元素相乘,並返回乘積之和。 語法   SUMPRODUCT(array1,array2,array3, ...)   Array1,array2,array3, ... 為 2 到 30 個數組,其相

Timer的定時排程函式schedule的用法(Java)

schedule的四種用法schedule(task,time)task-所安排的任務  time-執行任務的時間作用:在時間等於或者超過time的時候執行且僅執行一次import java.text.SimpleDateFormat; import java.util.Ca

mysql中模糊查詢的用法介紹

包含 如果 正則 搜索 name 模糊查詢 長度 use mysql 下面介紹mysql中模糊查詢的四種用法: 1,%:表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。 比如 SELECT * FROM [user] W

JS中this的用法

syn pac copy title pan 復制 comment test code 1.在一般函數方法中使用 this 指代全局對象 1 2 3 4 5 function test(){     this.x = 1;     alert(this.

C# this關鍵字的用法

end 復制代碼 replace 原始類型 catch 擴展 取數據 convert exec 用法一 this代表當前類的實例對象 namespace Demo { public class Test { private string

c++中for的用法

四種 mes pre using In col space c++ names #include <algorithm> #include <vector> #include <iostream> using namespace

QMessageBox 的用法

void MainWindow::on_info_clicked() { //info QMessageBox::information(this, "Title", "Text"); } void MainWindow::on_question_clicked() { //ques

Dialog的用法

 對話方塊Dialog在android基本用法很多種簡單介紹一下以下四種用法  Button btn1;  Button btn2;  Button btn3;  Button btn4;  final int DIALOG_ONE

JAVA中this的用法的詳解

2018年10月31日 15:27:47 Nirvana again 閱讀數:2 個人分類: JAVA

[java]static關鍵字的用法

在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程式的執行效能,優化程式的結構。下面我們先來了解一下static關鍵字及其用法。 static關鍵字 1.修飾成員變數 在我們平時的使用當中,static最常用的功能就是

java web javaEE ,jsp EL表示式和JSTL標籤if-else if-else用法

一.條件運算子${user.gender==1?'男':'女'}二.if()<c:if test="${2>1}">code..</c:if>code會在test屬性為true時執行三.if()-else{}<c:choose>  &

static關鍵字的用法

在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程式的執行效能,優化程式的結構。下面我們先來了解一下static關鍵字及其用法。static關鍵字1.修飾成員變數在我們平時的使用當中,

淺談c#委託的用法及lambda匿名委託

c#委託是一個類,可以定義一種方法型別,將有這種型別的函式當做引數進行傳遞,即他是一個可以把方法作為引數的類。 這裡通過一個小功能分別說明一下c#委託(delegate、Action、Func、predicate)的用法。 如下圖所示: Form1窗體

JS(ES6)中this的用法

轉載文章:https://www.cnblogs.com/pabitel/p/5922511.html JS(ES6)中this的五種用法 1.在回撥函式中使用this 不知道呼叫者是誰? //setInterval定時器函式中的回撥函式,不知道最後是那個在呼叫,如果回撥函式不用箭頭函,

正則表示式-問號的用法

原文符號 因為?在正則表示式中有特殊的含義,所以如果想匹配?本身,則需要轉義,\? 有無量詞 問號可以表示重複前面內容的0次或一次,也就是要麼不出現,要麼出現一次。 非貪婪匹配 貪婪匹配 在滿足匹配時,匹配儘可能長的字串,預設情況下,採用貪婪匹配 string patt

C語言const關鍵字的用法

#include <stdio.h> /* gcc中,const是通過編譯器在編譯的時候執行檢查來確保實現的(也就是 說const型別的變數不能改是編譯錯誤,不是執行時錯誤。)所以

內部類的用法

內部類Inner Class   將相關的類組織在一起,從而降低了名稱空間的混亂。   一個內部類可以定義在另一個類裡,可以定義在函式裡,甚至可以作為一個表示式的一部分。 Java中的內部類共分為四種: 靜態內部類static inner class (

[java]static關鍵字的用法和void的用法

void關鍵字表示函式沒有返回結果,是java中的一個關鍵字。Void作為函式的返回結果表示函式返回null(除了null不能返回其它型別)。在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可

淺談static關鍵字的用法

 1、修飾成員變數:  在一個person類中,一個成員變數例如 String name,當new2個person()物件時候,這2個物件在堆的位置是不同的,給name賦值張三、李四,這兩個物件的  name是互相不影響的。  當用static修飾時,例如static String name,這個變數是存在靜

synchronized的用法

一 修飾方法 Synchronized修飾一個方法很簡單,就是在方法的前面加synchronized,synchronized修飾方法和修飾一個程式碼塊類似,只是作用範圍不一樣,修飾程式碼塊是大括號括起來的範圍,而修飾方法範圍是整個函式。 例如: 方法一 public