有一個數(shù)據(jù)表如右圖所示,要求統(tǒng)計A2:A11單元格區(qū)域中不重復(fù)記錄的個數(shù)。
方法1:
使用COUNTIF函數(shù)創(chuàng)建數(shù)組公式:
{=SUM(1/COUNTIF(A2:A11,A2:A11))}
思路解析:
使用條件統(tǒng)計函數(shù)COUNTIF返回區(qū)域內(nèi)每個記錄出現(xiàn)次數(shù)的數(shù)組,被1除后在對得到的商求和。假設(shè)記錄X出現(xiàn)N次,則每次都轉(zhuǎn)為N/1,N個1/N求和得到1。
這是一個統(tǒng)計不重復(fù)值的經(jīng)典算法,起特點如小。
(1)統(tǒng)計區(qū)域內(nèi)不得有空單元格,否則返回#DIV/0!錯誤。可以用下面的數(shù)組公式解決這個問題:
{=SUM(IF(A2:A11<>"",1/COUNTIF(A2:A11,A2:A11))}
(2)因為EXCEL浮點運算可能產(chǎn)生誤差而造成答案不正確,即公式返回值比正確值小。對于這種情況,可以用嵌套ROUND函數(shù)修正。
(3)對數(shù)據(jù)類型沒有要求,文本,數(shù)值,邏輯值,錯誤值均可。
(4)統(tǒng)計區(qū)域不限于單行或單列(即一維引用),可以是A1:C10這樣的矩形區(qū)域,但必須是對單元格區(qū)域的引用,而不能是非引用類型的數(shù)組。
方法2:
使用FREQUENCY函數(shù)法創(chuàng)建數(shù)組公式:
{=SUM(IF(FREQUENCY(A2:A11,A2:A11)>0,1))}
此公式可以簡化為
{=SUM(–(FREQUENCY(A2:A11,A2:A11)>0))}
思路解析:使用FREQUENCY函數(shù)返回統(tǒng)計區(qū)域的分部頻率數(shù)組中,在記錄第一次出現(xiàn)的對應(yīng)位置是該記錄出現(xiàn)的總次數(shù),第二次出現(xiàn)的位置則為0。
此方法特點如下:
(1)統(tǒng)計區(qū)域可以有空單元格。因為該函數(shù)將忽略空白單元格和文本。
(2)沒有浮點運算誤差。
(3)參數(shù)只能為數(shù)值,如果是一維的"文本"數(shù)據(jù),可以借助MATCH函數(shù)轉(zhuǎn)換為行,序列號數(shù)值再進(jìn)行統(tǒng)計。
(4)參數(shù)不受引用或數(shù)組的尺寸范圍限制,可以支持多行多列的"數(shù)值"數(shù)據(jù)的不重復(fù)統(tǒng)計。
方法3:
使用MATCH=ROW比較法創(chuàng)建數(shù)組公式:
{=SUM(IF(MATCH(A2:A11,A2:A11,)=ROW(2:11)-1,1))}
此公式可以簡化為:
{=SUM(–(MATCH(A2:A11,A2:A11,)=ROW(2:11)-1))}
思路解析:
使用MATCH函數(shù)返回區(qū)域內(nèi)每個記錄第一次出現(xiàn)的位置,并與ROW函數(shù)返回的記錄所在對應(yīng)行號減去首條記錄行號得到的1~m(記錄總個數(shù))的數(shù)組比較,即第一次出現(xiàn)就算1次,其他記錄忽略。
此方法的特點如下:
(1)統(tǒng)計區(qū)域內(nèi)不得有空單元格,否則MATCH函數(shù)返回#N/A錯誤。對于所包含的空單元格,可以用文本合并進(jìn)行相應(yīng)的處理,如{=SUM((A2:A11<>"")*(MATCH(A2:A11&"",A2:A11&"",0)=ROW(2:11)-1))}。
(2)不會有浮點運算誤差。
(3)數(shù)據(jù)類型可以是文本,數(shù)值,邏輯值,但不得包含錯誤值。
(4)僅限于一維區(qū)域引用或一維數(shù)組。