在 Excel 中处理数据时,我们经常会遇到包含重复数值的列。比如,员工表或客户表的城市一列,又比如商品销售清单的商品名称一栏。数据处理工作的一个内容可能就是列出这些数据的唯一值,看看哪些城市有客户,供应商或员工,看看哪些商品被卖了出去。这个任务用 Excel 的高级筛选功能是非常容易做到的。不过,也许是出于对算法的追求,有一个用公式的解法来列出唯一值。我不是这个公式的原创者,但还是很愿意解释一下这个公式,看一下例子吧。

  A B C D
1 城市   城市 位置
2 上海   上海 2
3 上海   北京 4
4 北京   广州 5
5 广州   南京 7
6 广州   0 11
7 南京    #N/A #N/A
8 北京      
9 上海      
10 广州      
11        

A 栏是包含了重复值的一列城市名,我们要在 C 栏用公式列出唯一的城市名。

示例数据中我们用到了列名“城市”,这是个好的习惯,因为用高级筛选功能也是要求原始数据有列名的。

在 C2 输入 =INDEX(A:A,MATCH(0,COUNTIF(C$1:C1,$A$1:$A$11),)),按 CTRL+SHIFT+ENTER 作为数组公式输入。下面来解释一下这个公式的构造:

要在 C 栏列出唯一值,肯定要在原始数据,即 A 栏中进行查找,这是最外面的 INDEX 公式的用处。现在的问题变成,如何构造一个公式能返回每个值第一次出现时的位置。接下来考察一下 Match 这个公式,在 D2 输入 =MATCH(0,COUNTIF(C$1:C1,$A$1:$A$11),),也是按 CTRL+SHIFT+ENTER 作为数组公式输入,从结果可以看出,D 栏列出了每个唯一值在 A 栏第一次出现时的序号或位置。

这个问题可以这样考虑,如果我们能在 C 栏通过公式列出唯一值,那么假定我们已经列出了一部分唯一值。接下来的那个唯一值,也即 A 栏中将要取出的那个值,在 C 栏已有的唯一值列表中是找不到的。也就是说,将要取出的那个值,在 C 栏已有的唯一值列表中出现次数是0。它上面的那些值都已经在  C 栏已有的唯一值列表中出现过了,否则也不会轮到它。这就是 Match 函数要从一个序列中查找 0 值的意义所在。那么,怎么构建一个序列,对应 A 栏中的数据是否在 C 栏中出现过呢?这个序列应该是类似 {1,0,0,1,1,0,……}这个样子,因为 C 栏是唯一值,对于 A 栏中的每个数据在 C 栏中只可能出现一次,返回一个 1,不出现就返回 0。当这个数据在 A 栏中重复出现时,又会返回一个 1,我们期望的序列是和 A 栏的数据一一对应的,对应关系是——这个值是否在 C 栏已有列表中出现过。

用 CountIf 函数来构造这个序列,我只能说这是基于对数组函数和 CountIf 函数本身的及其熟稔才能做到的。CountIf 函数返回的序列的大小(元素个数)和它的第二个参数的大小是一致的。就这个例子而言,COUNTIF(C$1:C1,$A$1:$A$11),表示对 $A$1:$A$11 中的每个数据在 C$1:C1 中进行查找,返回一个是否存在的 0,1值序列。

这个问题的另一个技巧就是 C$1:C1 的半固定表示法。当公式向下复制的时候,C1 会增长为 C2,C3 等等,永远只在已有的唯一值列表中查找。对于 Excel,这是个递归的计算。我们的逻辑,也是用归纳法推出来的。

Excel 中用公式列出唯一值——模拟高级筛选功能相关推荐

  1. python实现excel高级筛选怎么用_Python数据处理,工具用错了,还不如Excel的高级筛选功能...

    更多 Python 数据处理的干货,敬请关注!!!! 系列文章: 懂Excel就能轻松入门Python数据分析包pandas(一):筛选功能 前言 经常听别人说 Python 在数据领域有多厉害,结果 ...

  2. 利用高级筛选功能巧妙删除Excel的重复记录

    以下操作需要注意一点是: 先到目标的sheet里面选cell Excel有一个小小的缺陷,那就是无法自动识别重复的记录.为了清除这些重复记录,有的朋友是一个一个手工删,既费时又费力. 虽说Excel中 ...

  3. 高级筛选英语或计算机分数大于85,利用高级筛选功能筛选出语文或数学成绩大于等于80的所有记录...

    利用高级筛选功能筛选出语文或数学成绩大于等于80的所有记录 选择全部数据, 按语文成绩排序,删除低于80的行: 再按分别数学.英语排序删除相应行. 剩下的都满足. 只筛选三次,手动操作比输入 正则表达 ...

  4. python解析excel公式_[python][openpyxl]读取excel中公式的结果值

    要读取cell中的值,但是,如果cell中的值是一个公式,则读取出来的是公式.有时候我们希望读取到公式计算出来的结果,可以使用load_workbook()中的data_only属性. load_wo ...

  5. matlab中用公式求pi值,matlab用π 4公式求π的近似值,直到某一项的绝对值小于10-6为止...

    求问matlab计算的几个公式以及方法. 峰值max峭度应该就是梯度了gradient曲线画图:plot(二维)plot3(三维),其他画图都用这个就够了查matlab文档 求matlab高手,这个公 ...

  6. 在 Excel 中使用高级筛选功能

    Excel  是存放大量数据的地方,但它又不是个专业的数据库.然而Excel 用户对数据的操作要求却越来越靠近数据库.比如筛选这件事吧,Excel 的 AutoFilter 功能大多数人都会用,也许还 ...

  7. Excel 计算重复项中的唯一值的方法

    计算重复项中的唯一值 假设你想要了解包含重复值的范围中有多少个唯一值. 例如,如果列包含: 值 5.6.7 和 6,结果为三个唯一值 - 5.6 和 7. 值"Bradley".& ...

  8. execl筛选去重_Excel中如何去除重复值,保留唯一值

    有些Excel表格使用时间长了,就出现了一些重复项,有整行内容重复的,也有部分内容重复的,就像下图左边的表格,有三个"张三"和两个"王五",怎样变成右边那个没有 ...

  9. python怎么筛选excel数据_懂Excel也能轻松入门Python数据分析包pandas(二):高级筛选(上)-excel筛选...

    转发本文并私信我"python",即可获得Python资料以及各种心得(持续更新的) 系列文章: 前言 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理 ...

最新文章

  1. Android各版本新特性
  2. 一文揭秘微服务架构统一安全认证设计与实践!
  3. PostgreSQL 优化器代码概览
  4. ASP.NET,IE6下URL中文乱码问题
  5. 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐的组合数+(取模,数学,思维)
  6. 就是要你懂负载均衡--lvs和转发模式
  7. 高通平台添加或者移植一个完整的camera
  8. 对fragment的学习
  9. 最受欢迎Java数据库访问框架大比拼,你独爱哪一款?
  10. 分布式事务解决方案之最大努力通知
  11. 分布式架构,Java高级工程师必看系列
  12. 用计算机如何判断闰年,php判断/计算闰年的方法小结【三种方法】
  13. AnaConda下载安装完了只有anaconda prompt问题
  14. android的短信发送全过程源代码分析
  15. 薛老师软考高项学员:2016年4月11日作业
  16. 【Wordle】Day8:昨天忘了的后果就是今天输了
  17. 虾皮马来西亚热销产品有哪些?
  18. 2.4 Spring Framework 5.x之DI(依赖注入)
  19. 微软模拟飞行10厦门航空涂装_《微软模拟飞行》好评如潮:无与伦比飞行体验...
  20. 石油远程《机械设计》第三次在线作业

热门文章

  1. getsockopt和setsockopt
  2. android 电信4gapn,修改apn加快电信4g网速(电信最佳apn接入点)
  3. mysql中的case when 与if else
  4. 使用DelayQueue实现订单限时支付处理
  5. 揭秘三端型肖特基二极管检测好坏的方法
  6. 软件版本发布要求和标准
  7. 大数据对于旅游业意味着更大的挑战
  8. 小程序怎么运营才会有高收益?流量主官方文档中寻找的可行性方案
  9. 长春理工计算机学院保研外校,长春理工大学174被保研:近7成保研985高校,还有清华、北大……...
  10. Android学习之手机传感器的获取