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

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

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

d56f298d1cb3f4d420b5d8f3866b8586.png

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

e8b8613bc7a82f0b96511e3dd206f37c.png

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

a63ecfa5709a60804561781699c55633.png

366babd322399d9fa3848757e291ccf4.png方法一关于去除重复计数,也就是统计唯一值,Excel 中有一个经典的用法。使用 SUMRODUCT 和 COUNTIF/COUNTIFS 函数完成。

= SUMPRODUCT(1/COUNTIF(统计区域,统计区域))

现在看不懂没关系,我们通过这个案例,一起走一遍这个过程。❶ COUNTIFS 统计数量。首先是统计数量,因为这里有「用户 ID」「活动日期」两列数据,所以我们用 COUNTIFS 函数。e5d8b7a8397fd435aee79e7b8be72809.png完成公式如下:
=COUNTIFS(C2:C16,C2:C16,B2:B16,H2)
计算结果:
= {0;0;0;0;0;0;0;0;0;0;0;1;1;1;1}
注意:这里有一个数组的用法,在判断条件的参数中使用数组,那么计算的结果,也是对应数量的数组。

c9ab59a325a659a9e5633344fa0e38c0.png

❷ 数量求倒数。接下来,用 1 除以计数结果,获取对应的倒数。7a5988507d1d22b634bb011509e18458.png完成公式如下:
=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 进行求和。faf75c2aa53b4117ff6f25bc594237e9.png完成公式如下:
=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 用户上了。

82a1ad269e6430b3ec994d870c71a696.png

所以需要再增加一个用户条件的判断,这里使用 EXACT 函数实现。4196b6fa77919675829638ddd95afd47.png完整公式如下:
=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 步的计数过程相乘就可以了。8222a38b6b8bf8ceec66495a88595b55.png完成公式如下:
=SUMPRODUCT(IFERROR(1/COUNTIFS(C2:C16,C2:C16,B2:B16,H2)*EXACT(B2:B16,H2),0))
▲左右滑动查看计算结果:
=1
这样就把非当前用户的统计给去掉了,也就得到了最终的结果。29114a15dcde3ead7125e4c0d16a3f05.png方法二方法 1 是传统的方法,经过一番折腾,最终算是圆满完成了需求。但是正如你所感受到的,传统函数公式的思路太古怪,一般人很难想到用 1/次数的方法,来做去重计数。

184baddcc1e22cbf7c6351ca8559df01.png

这也是函数公式难学的主要原因。正常用户的思路,不应该是这样的嘛?

❶ 筛选用户 ID

❷ 去除重复值

❸ 统计数量

这个正常的思路,用传统公式是很难实现的。但是 Office 365 中新增的 FILTER 和 UNIQUE 函数,让这个过程变的简单,变的正常了。❶ 筛选用户 ID。使用新增的 FILTER 函数,可以轻松的根据「用户 ID」筛选对应的记录。b3eccd6adbf89f4ee1f79d6962c3216f.png完整公式如下:
=FILTER($C$2:$C$16,$B$2:$B$16=H4)
计算结果:
={43739;43739;43739;43740;43741;43742}
FILTER 的作用就是筛选符合条件的记录。(日期返回的是数字格式,所以变成了 43739 的样子。)❷ 去除重复值。Office 365 中新增的 UNIQUE 函数,就是用来去除重复值的。5b3e5a3a9b754774cd1749b4d330f121.png完整公式如下:
=UNIQUE(FILTER($C$2:$C$16,$B$2:$B$16=H4))
计算结果:
={43739;43740;43741;43742}
注意到了吗?FILTER 筛选出来的重复值,被 UNIQUE 函数一下子去除掉了。❸ 统计数量。有了去重后的筛选结果,统计数量太简单,就是普通的 COUNTA 函数嘛。66d6870bdbabf165804c49c4eed30f2a.png完整公式如下:
=COUNTA(UNIQUE(FILTER($C$2:$C$16,$B$2:$B$16=H4)))
计算结果:
= 4
简单的 3 个步骤,符合常规思路,你肯定一下子就学会了,不是吗?fb4eae4c654d0efad683350223d5ec08.png总结温馨提示:FILTER 和 UNIQUE 函数,目前只有 Office 365 的版本才有,而且需要参加「预览版体验计划」。之前我也专门写过 FILTER 和 UNIQUE 的教程,点击下面的文章,就可以进入学习。0d611ebc56c53062c675107d1379cd15.pngUNIQUE 函数0d611ebc56c53062c675107d1379cd15.pngFILTER 函数今天的非重复计数学会了吧,别忘了点「在看」,签到打卡!如果你工作中经常用到 Excel,想全面快速提升 Excel 技能,小 E 推荐你学习《和秋叶一起学 Excel》网课!课程不限时间次数,手机电脑,随时随地都能学习!还有专属学员群、在线答疑服务……今天小 E 特地为你们申请了30 元优惠,到手价仅需 139 元~优惠券仅限今天前 50 名,数量有限,先到先得!9c4c2447565969fa72ea4c82fe5e2a2b.png

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

c27d2edd5bf0aed950e660d48e33cd27.png

ce190595e846069366c86bd152526b2b.png

99c30e49b15f62cde1da5937ca8d103d.png

f688c7a7444a0df36f833c0e60a123bf.png

797137a355577f94a98cd0ffd350fb4e.png

2377d5e59c64a90063d79f3518596d86.png

签到打卡在这里 !362bdfa9cf97f83f6b0d631699b8f749.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring shell_Spring Shell项目发布

spring shellSpring Source昨天发布了Spring Shell 。 Spring Shell是一个交互式Shell,可以使用基于Spring的编程模型轻松地通过命令进行扩展。 它是通过删除OSGi依赖项从Spring Roo项目中提取的,并变成了一个独立项目。 这使得那些只希望使用交互式外壳…

Word报告自动生成(例如 导出数据库结构)

将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能。适用于导出数据库的结构(表、字段等)到Word或将体检数据自动生成Word版的体检报告等。代码:Github 一、主要需要完成功能: 1. 灵活的配置规则及word样式设置&#…

马尔科夫随机场

1、相关概念 马尔科夫随机过程:在已知当前状态的情况下,未来的状态只与当前状态有关,与过去状态无关。这种已知“现在”的条件下,“未来”和“过去”彼此独立的特性叫做马尔科夫性,具有这种特性的随机过程叫做马尔科夫…

php上传文件详解

上传文件功能由两个部分组成&#xff0c;HTML页面和PHP处理部分。HTML页面主要是让用户选择所要上传的文件&#xff0c;php部分让我们可以把文件存储到服务器的指定目录。 一&#xff0e;HTML部分 upload.html [html] view plaincopy<html> <head> &…

pythonwhile循环love_input和while循环——Python编程从入门到实践

PythonPython开发Python语言input和while循环——Python编程从入门到实践input( )input()函数&#xff1a;让程序运行暂停&#xff0c;等待用户输入。message input(Tell me something, and I will repeat it back to you:)print(message)运行结果&#xff1a;Tell me somethi…

phpstudy添加redis扩展

操作系统 windows&#xff1b; 直接贴步骤记录下 一. 划重点&#xff0c;运行phpinfo(), 观察第四行 x86 好了记住这个 x86 三. http://pecl.php.net/package/redis php官方redis扩展下载地址&#xff1b; 我需要的是3.1的版本 之前记住的 x86 当然并不是所有人…

高阶图匹配

一、基于结构特征的相似性度量 将特征看作向量空间中的点&#xff0c;通过计算两个点或者两个点组之间的距离来度量他们是否相似。 一阶度量&#xff1a;minkowsky距离、马氏距离 二阶度量&#xff1a;特征点本身有相关性&#xff0c;所以将特征点对之间的关系加入到相似性度量…

visual studio installer可以卸载吗_ArcGIS 怎样彻底删除和卸载

如何完全卸载ArcGIS为大家演示如何完全卸载ArcGIS。方法/步骤1打开控制面板&#xff0c;找到“卸载程序”。或者使用360安全卫士2选择卸载程序&#xff0c;在新界面中找到与ArcGIS有关的程序。3右键单击要卸载的内容&#xff0c;并选择“卸载/更改”。按照此方法&#xff0c;把…

Linux下安装和使用boost库

由于在毕业设计中需要用到C对象序列化工具&#xff0c;所以想利用boost库中的serialization库。Boost库分为两个部分来使用&#xff0c;一是直接使用对应的头文件&#xff0c;二是需要编译安装相应的库才可以使用。下面记录一下今天的安装和使用过程&#xff08;整个boost库全部…

javaone_JavaOne 2012:在JVM上诊断应用程序

javaone值得参加Staffan Larsen &#xff08;Oracle Java Serviceability Architect&#xff09;的演讲“ 在JVM上诊断您的应用程序 ”&#xff08;Hilton Plaza A / B&#xff09;&#xff0c;只是为了学习Oracle JVM 7提供的新jcmd命令行工具。该演示对我来说是“奖金”&…

高斯曲率求表面极值点

1.基本概念 平均曲率、主曲率和高斯曲率是曲率的三个基本要素。 法曲率&#xff1a;曲面在一点沿着不同方向的弯曲程度不同。或者说曲面离开切平面的速度不同。这个弯曲属性可以用这一点的沿着这个方法的法曲率刻画 主曲率&#xff1a;过曲面上某个点上具有无穷个正交曲率&…

g++基础知识

一、编译过程&#xff1a; 1&#xff09;预处理&#xff0c;生成.i文件 2&#xff09;转换成为汇编语言&#xff0c;生成.s文件 3&#xff09;汇编变为目标代码&#xff08;机器代码&#xff09;&#xff0c;生成.o文件 4&#xff09;链接目标代码&#xff0c;生成可执行程…

如何:使用Json插入数据库并从中读取

在本文中&#xff0c;我们将为Speedment创建一个插件&#xff0c;该插件使用Gson生成序列化和反序列化逻辑&#xff0c;从而使其在数据库实体和JSON字符串之间进行映射非常容易。 这将有助于展示Speedment代码生成的可扩展性&#xff0c;同时探索Gson库的一些很酷的功能。 Spe…

C语言pow()函数:求x的y次方(次幂)

1、头文件&#xff1a;#include2、原型&#xff1a;double pow(double x, double y);pow() 函数用来求 x 的 y 次幂&#xff08;次方&#xff09; pow()用来计算以x 为底的 y 次方值&#xff0c;然后将结果返回。设返回值为 ret&#xff0c;则 ret xy。 3、可能导致错误的…

本周学习总结JAVA

6. 为如下代码加上异常处理 byte[] content null; FileInputStream fis new FileInputStream("testfis.txt"); int bytesAvailabe fis.available();//获得该文件可用的字节数 if(bytesAvailabe>0){content new byte[bytesAvailabe];//创建可容纳文件大小的数组…

Day18 226翻转二叉树 101对称二叉树 100相同的树 572另一棵树的子树

226 翻转二叉树 递归前序遍历和后序遍历&#xff1a; class Solution { public:void swap(TreeNode*&a,TreeNode*&b){TreeNode*tmp a;a b;b tmp;}void reverseTree(TreeNode* cur){if(curnullptr) return;swap(cur->left,cur->right);reverseTree(cur->l…

python删除列表中字符串_python - 删除字符串中的字符列表

如果您正在使用python2并且您的输入是字符串(不是unicodes)&#xff0c;那么绝对最好的方法是remove_chars_translate_bytes&#xff1a;>>> chars_to_remove [., !, ?]>>> subj A.B!C?>>> subj.translate(None, .join(chars_to_remove))ABC否则…

C语言的格式控制符问题

写C程序遇到这样一个问题&#xff0c;定义了double变量&#xff0c;printf输出却要%f。一直以为应该用%lf&#xff0c;事实上VC6.0用%lf会报错。原因还要在探究。 贴吧有人说&#xff1a;double变量&#xff0c;scanf时必须用%lf&#xff0c;printf时要用%f或者%lf&#xff08;…

php无法用mail函数发送邮件之原因

[导读]PHP 需要一个已安装且正在运行的邮件系统&#xff0c;以便使邮件函数mail()可用。所用的邮件系统程序通过在 php.ini 文件中进行设置。用如下代码发送邮件&#xff0c;可总是发送失败。 [php] view plaincopyprint? 01.<?php 02.$to "xxxxxxxxqq.com";…

Linux内核设计与实现 总结笔记(第五章)系统调用

系统调用 内核提供了用户进程和内核交互的接口&#xff0c;使得应用程序可以受限制的访问硬件设备。 提供这些接口主要是为了保证系统稳定可靠&#xff0c;避免应用程序恣意妄行。 一、内核通信 系统调用在用户空间进程和硬件设备之间添加中间才能。作用有三&#xff1a; 为用户…