点击上方蓝字关注星标★不迷路



= 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/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(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
这样就把非当前用户的统计给去掉了,也就得到了最终的结果。
这个正常的思路,用传统公式是很难实现的。但是 Office 365 中新增的 FILTER 和 UNIQUE 函数,让这个过程变的简单,变的正常了。❶ 筛选用户 ID。使用新增的 FILTER 函数,可以轻松的根据「用户 ID」筛选对应的记录。❶ 筛选用户 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 个步骤,符合常规思路,你肯定一下子就学会了,不是吗?



↑↑↑现在扫码,还可免费试看!
