excel 方程的解釋?

大家好,
一個有關excel的問題:
我想知道如何計算出 某一列中 不重複項的個數(重複數據只計一次)?
在網上找到了這個回答:
」假設數據在A2:A21,則統計數據個數(重複數據只計算1次)的公式為:=SUMPRODUCT(1/COUNTIF(A2:A21,A2:A21))「
請問該函數如何理解? countif 括弧中重複的兩次 代表什麼? 之前的 1/ 代表什麼?為什麼用sumproduct?
同時請問,還有沒有其他公式可以實現同樣的結果?
最後,可否給出一個公式以計算所有重複項的個數(不分類呈現,比如 不通過該方式:1有5個,2有3個。 而只給出所有重複項的總個數,比如上例中,重複項共8個。)
非常感謝!


這個公式很巧妙,先利用COUNTIF()統計每個單元格內容出現的次數N,然後取倒數,這樣每個單元格就變成了1/N,由於1/N必然出現N次,那麼相加後就是去重後的數量。

COUNTIF(A2:A21,A2:A21))意思是對A2到A21分別用A2到A21的內容做一次重複內容統計,結果是一個數組(N1, N2, N3…Nm),每個值是本單元格內容的重複次數。


首先先解釋一下公式。

這個公式的確是非常巧妙,我來詳細地解釋一下。

說明

COUNTIF 函數對區域中滿足單個指定條件的單元格進行計數。


語法

COUNTIF(range, criteria)

參數
range 必需。要對其進行計數的一個或多個單元格,其中包括數字或名稱、數組或包含數字的引用。空值和文本值將被忽略。
criteria 必需。用於定義將對哪些單元格進行計數的數字、表達式、單元格引用或文本字元串。例如,條件可以表示為 32、">32" 、B4、"蘋果" 或 "32"。

根據以上微軟官方的說明,range就是區域,criteria就是條件(被統計的單元格)。

於是,我們可以把COUNTIF(A2:A21,A2:A21)拆開成20個公式來理解。

COUNTIF(A2:A21,A2) 在區域A2:A21中對和A2一樣的單元格進行計數。
COUNTIF(A2:A21,A3) 在區域A2:A21中對和A3一樣的單元格進行計數。
……
COUNTIF(A2:A21,A21) 在區域A2:A21中對和A21一樣的單元格進行計數。

為了直觀一點,我們把這20個公式的結果逐一計算出來如下:

糾正:圖中SUMPRODUCT(C2:C16)應作SUMPRODUCT(E2:E21)

可以看到在A1:A21中只有1,2,3,4,5這5個數字,顯然『不重複項的個數』等於5。

COUNTIF(A2:A21,A2)統計出了 3 出現的次數是 5 次

COUNTIF(A2:A21,A4)也統計出了 3 出現的次數是 5 次

COUNTIF(A2:A21,A11)也統計出了 3 出現的次數是 5 次

COUNTIF(A2:A21,A16)也統計出了 3 出現的次數是 5 次
COUNTIF(A2:A21,A19)也統計出了 3 出現的次數是 5 次
對他們都取倒數,得到的結果都是0.2,再全部相加,得到的結果必然是1。

對於其他數字也是一樣,得到的結果必然都是1。

把它們全部相加的結果一定是等於5的。

所以COUNTIF(A2:A21,A2:A21)實際上就是這20個公式的簡寫。


關於題主的問題:

最後,可否給出一個公式以計算所有重複項的個數(不分類呈現,比如 不通過該方式:1有5個,2有3個。 而只給出所有重複項的總個數,比如上例中,重複項共8個。)

我沒有想出只用公式來解決這個問題,只能給出一個用VBA寫的宏來解,不過也不是很難,思路就是把不止出現了一次單元格個數記錄下來。

考慮到題主理解的延續性,這段代碼用的也是COUNTIF。如果題主能看懂之前的解釋,那麼下面這段代碼應該不難理解。

Sub macro1()
"除去只出現一次的單元格就是重複的單元格
For Each Rng In Worksheets("Sheet1").Range("A2:A21")
If WorksheetFunction.CountIf(Range("A2:A21"), Rng) &<&> 1 Then
Range("A23").Value = Range("A23").Value + 1
End If
Next
End Sub

這段代碼是為了理解方便,肯定不是執行效率最高的,題主有興趣可以想想別的方法。


@shotgun 說的很好了,sumproduct也可以換成sum的數組形式(ctrl+shift+enter),這樣可能更好理解


這種巧妙的用法對我這種常用不到的人常學常忘。
折中一下:使用countif函數,統計重複條數,再使用篩選得到想要的


雖然我也喜歡用VBA,但Excel早幫我們寫好了函數。

以Excel 2010為例


選中需要計算的數組,滑鼠點最上面一行的數據-&>刪除重複項-&>確定,然後看最後一列的行值是幾就好了


推薦閱讀:

excel 鍵盤操作技巧?
請教,在EXCEl中,如何利用VBA篩選求和?
EXCEL中如何快速合併單元欄並求和?
在Excel中如何使工作簿內不同工作表單內的相同數值用條件格式篩選出來?
Excel 是用哪種計算機語言編寫的?

TAG:MicrosoftExcel | Excel公式 | Excel使用 |