您現在的位置是:首頁 > 音樂首頁音樂
如何用SUMPRODUCT函式和COUNTIF函式計算不重複人數
與自己姓名重複的人數包括自己嗎
文 / 康康哥哥
假如我們有一張表,其中有很多人名,但是我們想知道這份表裡總共有多少個不重複的人名,用公式該怎麼實現呢?
看過多少人主演的片子
計算不重複人數可以用SUMPRODUCT函式和COUNTIF函式組合來實現。
我們先來看看這兩個函式怎麼用。
SUMPRODUCT顧名思義,一個是“SUM”,意思是求和;另一個是“PRODUCT”,意思是乘積。所以這個函式的意思就是先乘積,再把乘積的結果求和。這麼說有點抽象哈,下面我們舉個栗子就好懂啦。
=SUMPRODUCT(A1:A8,B1:B8):把A1:A8和B1:B8兩個單元格區域中行對應的單元格的數值相乘,然後再把所有得到的乘積累加。通俗點講,計算過程分兩步:
(1)A1*B1,A2*B2,……,A8*B8;
(2)把第一步中8個值相加。
這個栗子中引數的個數是2個,實際上SUMPRODUCT函式的引數可以有很多個,也可以是一個,但是有一點要注意的是,這些引數必須是陣列,並且各個陣列的維數必須一致!又有點抽象對不對?稍微解釋一下:
(1)所謂“陣列”通俗點講就是M行N列的一個數據區域,比如A3:C10就是一個8行3列的陣列。
8行*3列
(2)所謂維數一致是指SUMPRODUCT函式的各個引數必須有相同的行數和列數。比如E5:G12也是一個8行3列的陣列,它和A3:C10同時作為SUMPRODUCT的函式是不會出錯的。但是如果不是一個8行3列的區域(比如8行2列,或者3行8列),同時作為SUMPRODUCT函式的引數是會報錯“#VALUE!”滴!
(3)常用的陣列是一維陣列,即一行值或一列值,比如A1:D1,A1:A5等。
(4)如果SUMPRODUCT的引數只是一個單元格的數值的話,也是不算錯的,因為單個單元格不就是一個1*1的陣列嘛!
(5)假如SUMPRODUCT函式只有一個引數的話,那麼就用不著跟誰乘了,就把數組裡的各個值相加就完了。比如=SUMPRODUCT(A1:A5),其結果就=A1+A2+A3+A4+A5。
(6)如果SUMPRODUCT函式有多個引數的話,就像2個引數那樣把各自對應的陣列元素相乘後,再把結果相加就好了。(不難理解吧,認真臉。)
OK,廢了好大勁終於把SUMPRODUCT函式的基本內容介紹完了,下面我們再來認識一下COUNTIF函式。
講真,COUNTIF函式是一個超好用的函式!它的主要作用是統計滿足條件的單元格有多少個。
語法規則是這樣的:
=COUNTIF(資料區域,計數的條件)
第二個引數是計數條件,根據其要求的內容來統計第一個引數資料區域中滿足條件的單元格有多少個。
還是舉個栗子比較容易懂。
各種資料型別
如圖中所示,假如我們在某空白單元格中輸入:
(1)=COUNTIF(H2:H9,890):表示在H2:H9資料區域中統計值為890的單元格的個數。在圖中很容易看出來,只有一個單元格滿足條件,那麼這個公式的結果就是1;
(2)=COUNTIF(H2:H9,“<>0”):表示在H2:H9資料區域中統計不等於0的單元格的個數。很顯然,除了H4是0之外,其他單元格都不等於0,因此這個公式的結果是7;
(3)=COUNTIF(H2:H9,H4):表示在H2:H9資料區域中統計值等於H4中單元格值的單元格的個數。也很容易看出來只有H4本身和H4相等,因此這個公式的結果是1;
(4)=COUNTIF(H2:H9,“>”&H2):表示在H2:H9資料區域中統計數值大於H2值的單元格個數。這裡注意兩點:一是“>”要有引號,二是“>”和“H2”之間要用“&”連線。這個公式的結果是2,這貌似和我們在圖中看到的不一樣,不是隻有890比32大嗎,為啥結果是2?這個並不難解釋哦,因為H9中的日期本質上也是數字,只是顯示為日期格式而已。如果我們選中H9單元格,將其數字格式改為“常規”,或直接用快捷鍵“Ctrl+Shift+~”,就可以看到日期格式變成了常規格式,原來就是個數字嘛!這樣是不是比32大的數字有2個了?
常規格式的日期
(5)=COUNTIF(H2:H9,“<>”):表示在H2:H9資料區域中統計不等於真空的單元格個數。我們看到H7中是沒有任何內容的,是一個真空單元格,那麼這個公式的值顯而易見就是7了!
現在我們將兩個函式都學會了,那麼下面就讓我們回到開頭的問題,怎樣用SUMPRODUCT函式和COUNTIF函式計算不重複的人數。
輸入統計函式
在D1單元格中輸入公式:
=SUMPRODUCT(1/COUNTIF(A2:A15,A2:A15))
結果我們已經看到了,是8。數一數A列是不是正好有8個名字呢?
下面我們來分析一下這個公式的原理。
首先看最內層COUNTIF(A2:A15,A2:A15):表示在A2:A15這個資料區域中分別找值等於A2,A3,……A15的值有多少個,我們可以自己數一下,其結果會返回一個記憶體陣列:
{2,2,3,3,2,2,2,1,2,1,3,1,2,2}
其次再看1/COUNTIF(A2:A15,A2:A15):表示將上述記憶體陣列取倒數:
{1/2,1/2,1/3,1/3,1/2,1/2,1/2,1,1/2,1,1/3,1,1/2,1/2}
最後再看最外層SUMPRODUCT(1/COUNTIF(A2:A15,A2:A15)):表示將上述取倒數後的記憶體陣列求和,很顯然,如果某個名字在表中出現N次,那麼取倒數後該數就會變成1/N,恰好在記憶體陣列中又會有N個1/N,這N個1/N用SUMPRODUCT求和後變成了1。也就是說,如果有M個名字,那麼整個陣列求和後最後的值恰好就是M!!!
是不炒雞贊~兩個看似很簡單的函式合體之後會發揮難以置信的作用,這就是Excel的奧妙所在,也是我們學習Excel的動力所在。
好了,今天就到這裡了,祝所有熱愛學習的孩子都能天天進步~