有一個(gè)數(shù)據(jù)表如附件所示,要求統(tǒng)計(jì)A2:A11單元格區(qū)域中不重復(fù)記錄的個(gè)數(shù)。
方法1:使用COUNTIF函數(shù)創(chuàng)建數(shù)組公式:
{=SUM(1/COUNTIF(A2:A11,A2:A11))}
思路解析:
使用條件統(tǒng)計(jì)函數(shù)COUNTIF返回區(qū)域內(nèi)每個(gè)記錄出現(xiàn)次數(shù)的數(shù)組,被1除后在對得到的商求和。假設(shè)記錄X出現(xiàn)N次,則每次都轉(zhuǎn)為N/1,N個(gè)1/N求和得到1。
這是一個(gè)統(tǒng)計(jì)不重復(fù)值的經(jīng)典算法,起特點(diǎn)如小。
(1)統(tǒng)計(jì)區(qū)域內(nèi)不得有空單元格,否則返回#DIV/0!錯(cuò)誤??梢杂孟旅娴臄?shù)組公式解決這個(gè)問題:
{=SUM(IF(A2:A11<>"",1/COUNTIF(A2:A11,A2:A11))}
(2)因?yàn)镋XCEL浮點(diǎn)運(yùn)算可能產(chǎn)生誤差而造成答案不正確,即公式返回值比正確值小。對于這種情況,可以用嵌套R(shí)OUND函數(shù)修正。
(3)對數(shù)據(jù)類型沒有要求,文本,數(shù)值,邏輯值,錯(cuò)誤值均可。
(4)統(tǒng)計(jì)區(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)計(jì)區(qū)域的分部頻率數(shù)組中,在記錄第一次出現(xiàn)的對應(yīng)位置是該記錄出現(xiàn)的總次數(shù),第二次出現(xiàn)的位置則為0。
此方法特點(diǎn)如下:
(1)統(tǒng)計(jì)區(qū)域可以有空單元格。因?yàn)樵摵瘮?shù)將忽略空白單元格和文本。
(2)沒有浮點(diǎn)運(yùn)算誤差。
(3)參數(shù)只能為數(shù)值,如果是一維的"文本"數(shù)據(jù),可以借助MATCH函數(shù)轉(zhuǎn)換為行,序列號(hào)數(shù)值再進(jìn)行統(tǒng)計(jì)。
(4)參數(shù)不受引用或數(shù)組的尺寸范圍限制,可以支持多行多列的"數(shù)值"數(shù)據(jù)的不重復(fù)統(tǒng)計(jì)。