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

本文作者:拉登 Dony来源:拉小登(ID:ladengchupin)本文编辑:小叮、竺兰前段时间遇到这样一个问题,让我很头疼。

头疼的原因有 3 点:❶ 问题描述不清晰,理解起来困难;❷ 去重复计算数量,函数公式实现难度大;❸ 提问的是个男生。

我尝试着把问题精简了一下,是这样的,你就凑活着看吧。一列「用户 ID」,一列「活动日期」,现在想统计,每个用户参加活动的天数。因为用户可能在 1 天中参加多次活动,所以要根据「用户 ID」对「活动日期」去除重复,然后再计数。明白了吗?明白了,咱们就开始干!

方法一关于去除重复计数,也就是统计唯一值,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

这样就把非当前用户的统计给去掉了,也就得到了最终的结果。方法二方法 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 个步骤,符合常规思路,你肯定一下子就学会了,不是吗?总结温馨提示:FILTER 和 UNIQUE 函数,目前只有 Office 365 的版本才有,而且需要参加「预览版体验计划」。之前我也专门写过 FILTER 和 UNIQUE 的教程,点击下面的文章,就可以进入学习。UNIQUE 函数FILTER 函数今天的非重复计数学会了吧,别忘了点「在看」,签到打卡!如果你工作中经常用到 Excel,想全面快速提升 Excel 技能,小 E 推荐你学习《和秋叶一起学 Excel》网课!课程不限时间次数,手机电脑,随时随地都能学习!还有专属学员群、在线答疑服务……今天小 E 特地为你们申请了30 元优惠,到手价仅需 139 元~优惠券仅限今天前 50 名,数量有限,先到先得!

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

签到打卡在这里 !

去除div最后一个逗号_去除重复值、统计数量,这个公式可以直接套用!相关推荐

  1. java如何给数字每三位加一个逗号_将每三个数字加上逗号处理Java代码

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. /** * 将每三个数字加上逗号处理(通常使用金额方面的编辑) * * @param st ...

  2. 去掉字符串首尾逗号_去除字符串首尾空格和特殊字符

    去除字符串首尾空格和特殊字符 用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符.在PHP中提供了trim()函数去 ...

  3. php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)

    首先分别解释下, trim过滤字符串两端, rtrim过滤字符串尾部,=chop() ltrim过滤字符串首部. 过滤字符串中键的咚咚就只能用str_replace咯. 举个例子说明下, PHP代码 ...

  4. php过滤第一个逗号和最后一个逗号,PHP字符过滤函数去除字符串最后一个逗号(rtrim)...

    首先分别解释下, trim过滤字符串两端, rtrim过滤字符串尾部,=chop() ltrim过滤字符串首部. 过滤字符串中键的咚咚就只能用str_replace咯. 举个例子说明下, PHP代码 ...

  5. php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)_php技巧...

    首先分别解释下, trim过滤字符串两端, rtrim过滤字符串尾部,=chop() ltrim过滤字符串首部. 过滤字符串中键的咚咚就只能用str_replace咯. 举个例子说明下, PHP代码 ...

  6. mvd没什么每次参数双都多一个逗号_学服装设计后,家里多了哪些奇怪又可爱的宝藏物品?...

    如果你身边有一个学习服装设计的小伙伴 你会发现他的家里 和你想象的完全不一样~ 你以为他们会时尚.干练.极简 实际上 他们更可能生活在花花绿绿.热闹又复杂的"仓库"里 好多学服装设 ...

  7. python 保存json时最后一个多了一个逗号_从json obj的最后一个对象中删除逗号

    不要用Jinja2手动生成JSON.您不可能希望在所有情况下都生成save和valid JSON.在 在较大的模板中嵌入JSON时,使用^{} built-in filter生成JSON.它不包括尾随 ...

  8. mvd没什么每次参数双都多一个逗号_必看!PostgreSQL参数优化

    前不久,一个朋友所在的公司,业务人员整天都喊慢. 朋友是搞开发的,不是很懂DB,他说他们应用的其实没什么问题,但是就是每天一到高峰期就办理特别的慢啊,各种堵塞,一堆请求无法完成.他们没有专门的DBA, ...

  9. freemarker 去掉最后一个逗号_从零开始做一个SLG游戏(六)游戏系统以及配置表...

    本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取. 一.经济系统 1.总述 经济系统可以是整个游戏的核心.在本游戏中只有一种资 ...

最新文章

  1. 哪些书你看之前以为很枯燥,结果一看却欲罢不能的?
  2. PHP Fatal error: Call to undefined function mb_substr()
  3. python转csv_python如何将列表存储为csv文件
  4. FFMPEG系列课程(一)打开视频解码器
  5. 剑指offer之顺时针打印矩阵
  6. FLASH缓动导航制作方法.
  7. 面试必考:秒杀系统的9个核心知识点,一次性打包给你
  8. 从0到1搭建大数据平台之数据采集篇
  9. linux中oracle中文乱码问题
  10. win10任务栏假死原因和解决方法
  11. Java分布式锁那点事
  12. mysql数据库递归访问数据
  13. 区块链是什么,如何去理解?
  14. 【PTA-训练day6】L2-016 愿天下有情人都是失散多年的兄妹+ L1-011 帅到没朋友
  15. 区块链中的记账权问题
  16. maya2018英文翻译_maya2018英文怎么切换中文?
  17. qt文件逐行读取_QT平台文件逐行读取和字符串规律输出练习
  18. 什么是机械学习?及Scikit-learn机械学习库
  19. ESP8266的PC客户端和Arduino两种方式的连接及使用笔记
  20. git fatal: could not read Username for ‘http://xxx.xxx.xxx‘: No such device or address

热门文章

  1. 牛客网数据开发题库_数据库刷题—牛客网(21-30)
  2. 网管型交换机比普通交换机有哪些明显优势
  3. 工业交换机的四种安装方式图解
  4. 与kylin_什么是Kylin,Kylin的学习
  5. 小学计算机管理,小学计算机室管理制度
  6. 错误:在keystone中无法找到默认角色user_第四章 keystone认证组件安装1
  7. sqlserver安装显示句柄无效_Sqlserver 2016 R Service环境安装的各种错误(坑)解决办法...
  8. webservice 参数太大_手把手系列:常用数据交换方案Web Service接口处理法
  9. Excel之抽奖器实现
  10. 基于(7, 5)归零非删余Turbo码的参数识别与分析