文 / 康康哥哥
假如我們有一張表,其中有很多人名,但是我們想知道這份表里總共有多少個不重復的人名,用公式該怎么實現呢?
計算不重復人數可以用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列的數組。
(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的動力所在。
好了,今天就到這里了,祝所有熱愛學習的孩子都能天天進步~