讓你的Excel效率開掛~(?˙▽˙?)
前段時間遇到這樣一個問題,讓我很頭疼。
頭疼的原因有 3 點:
? 問題描述不清晰,理解起來困難;
? 去重復計算數量,函數公式實現難度大;
? 提問的是個男生。
我嘗試著把問題精簡了一下,是這樣的,你就湊活著看吧。
一列「用戶 ID」,一列「活動日期」,現在想統計,每個用戶參加活動的天數。
因為用戶可能在 1 天中參加多次活動,所以要根據「用戶 ID」對「活動日期」去除重復,然后再計數。
明白了嗎?
明白了,咱們就開始干!
01
方法一
關于去除重復計數,也就是統計唯一值,Excel 中有一個經典的用法。
使用 SUMRODUCT 和 COUNTIF/COUNTIFS 函數完成。
= SUMPRODUCT(1/COUNTIF(統計區域,統計區域))
現在看不懂沒關系,我們通過這個案例,一起走一遍這個過程。
? COUNTIFS 統計數量。
首先是統計數量,因為這里有「用戶 ID」「活動日期」兩列數據,所以我們用 COUNTIFS 函數。
完成公式如下:
=COUNTIFS(C2:C16,C2:C16,B2:B16,H2)
計算結果:
= {0;0;0;0;0;0;0;0;0;0;0;1;1;1;1}
注意:這里有一個數組的用法,在判斷條件的參數中使用數組,那么計算的結果,也是對應數量的數組。
? 數量求倒數。
接下來,用 1 除以計數結果,獲取對應的倒數。
完成公式如下:
=1/COUNTIFS(C2:C16,C2:C16,B2:B16,H2)
計算結果:
={#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;1;1;1;1}
▲左右滑動查看
因為「1/0」會出現「#DIV/0!」的錯誤,所以公式外面,再加一個 IFERROR 容錯:
=IFERROR(1/COUNTIFS(C2:C16,C2:C16,B2:B16,H2),0)
計算結果:
={0;0;0;0;0;0;0;0;0;0;0;1;1;1;1}
這一步是非重復計數的關鍵操作,結合下一步倒數求和,會更容易理解。
? SUMPRODUCT 倒數求和。
因為 SUM 函數不支持數組操作,所以這里使用 SUMPROUDCT 進行求和。
完成公式如下:
=SUMPRODUCT(IFERROR(1/COUNTIFS(C2:C16,C2:C16,B2:B16,H2),0))
計算結果:
= 4
到這一步,你可能就明白求倒數的意義了。
如果相同數據出現了 2 次,那么計數過程就是「1/2 + 1/2 =2」;
如果出現了 3 次,就是 3 個「1/3」相加「=3」;
其他次數以此類推,即實現了非重復計數。
? 增加「用戶 ID」判斷。
但是上一步計算結果,顯然是錯的,QY1 的去重計數,應該是 1 才對啊。
這是因為計數的過程,沒有對用戶進行限制。
因為 QY1 有「10/4」的記錄,所有的「10/4」都被統計到 QY1 用戶上了。
所以需要再增加一個用戶條件的判斷,這里使用 EXACT 函數實現。
完整公式如下:
=EXACT(B2:B16,H2)
計算結果:
={FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}
▲左右滑動查看
EXACT 的作用,是判斷兩個數值是否相等。
因為 EXACT 中也是引用了區域,所以計算結果是一個 TRUE 和 FALSE 的數組。
接下來,是把 EXACT 的計算結果,作為條件添加到前面的公式中。
方法很簡單,和第 1 步的計數過程相乘就可以了。
完成公式如下:
=SUMPRODUCT(IFERROR(1/COUNTIFS(C2:C16,C2:C16,B2:B16,H2)*EXACT(B2:B16,H2),0))
▲左右滑動查看
計算結果:
=1
這樣就把非當前用戶的統計給去掉了,也就得到了最終的結果。
02
方法二
方法 1 是傳統的方法,經過一番折騰,最終算是圓滿完成了需求。
但是正如你所感受到的,傳統函數公式的思路太古怪,一般人很難想到用 1/次數的方法,來做去重計數。
這也是函數公式難學的主要原因。
正常用戶的思路,不應該是這樣的嘛?
? 篩選用戶 ID
? 去除重復值
? 統計數量
這個正常的思路,用傳統公式是很難實現的。
但是 office 365 中新增的 FILTER 和 UNIQUE 函數,讓這個過程變的簡單,變的正常了。
? 篩選用戶 ID。
使用新增的 FILTER 函數,可以輕松的根據「用戶 ID」篩選對應的記錄。
完整公式如下:
=FILTER($C$2:$C$16,$B$2:$B$16=H4)
計算結果:
={43739;43739;43739;43740;43741;43742}
FILTER 的作用就是篩選符合條件的記錄。
(日期返回的是數字格式,所以變成了 43739 的樣子。)
? 去除重復值。
Office 365 中新增的 UNIQUE 函數,就是用來去除重復值的。
完整公式如下:
=UNIQUE(FILTER($C$2:$C$16,$B$2:$B$16=H4))
計算結果:
={43739;43740;43741;43742}
注意到了嗎?FILTER 篩選出來的重復值,被 UNIQUE 函數一下子去除掉了。
? 統計數量。
有了去重后的篩選結果,統計數量太簡單,就是普通的 COUNTA 函數嘛。
完整公式如下:
=COUNTA(UNIQUE(FILTER($C$2:$C$16,$B$2:$B$16=H4)))
計算結果:
= 4
簡單的 3 個步驟,符合常規思路,你肯定一下子就學會了,不是嗎?
03
總結
溫馨提示:
FILTER 和 UNIQUE 函數,目前只有 Office 365 的版本才有,而且需要參加「預覽版體驗計劃」。
今天的非重復計數學會了吧,別忘了點個贊!
私信回復關鍵詞【工具】,獲取Excel高效小工具合集!
讓你的Excel效率開掛~(?˙▽˙?)