当前位置:首页 > 微软office > Excel > 正文内容

手把手教你,学会提取不重复值

zyhwxm3年前 (2022-03-01)Excel83

一维区域筛选不重复记录示例26-7    提取客户代表姓名26-8展示的是某单位销售记录表的部分内 容,需要提取不重复的客户代表姓名。

1. MATCH函数去重法在F2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键将公式向下复制到单元格显示空白为止。{=INDEX(C:C,SMALL(IF(MATCH(C$2:C$11,C:C,)=ROW($2:$11),ROW($2:$11),4^8),ROW(A1)))&""}公式中的"MATCH(C$2:C$11,C:C,)"部分利用MATCH函数在C列中依次查找C2:C11单元格区域中每个元素首次出现的位置,结果如下。{2;2;2;5;6;6;6;9;9;9}然后将以上内存数组结果与数据所在行号"ROW($2:$11)"进行比对,如果查找的位置序号与数据自身的位置序号一致,则表示该数据是首次出现;否则是重复出现。当MATCH函数结果与数据自身的位置序号相等时,返回当前数据行号;否则返回65 536。再通过SMALL函数将行号从小到大依次取出,最终由INDEX函数返回该位置的姓名,得到不重复的姓名列表。

2. COUNTIF函数和MATCH函数结合法在F2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键将公式向下复制到单元格显示空白为止。{=INDEX(C:C,1+MATCH(,COUNTIF(F$1:F1,C$2:C$12),))&""}公式中的"COUNTIF(F$1:F1, C$2:C$12)"部分利用COUNTIF函数在公式所在位置上方的单元格区域中,分别查找C$2:C$12单元格区域中每个数据的个数。COUNTIF函数的第一参数F$1:F1利用绝对引用和相对引用的技巧,形成一个自动扩展的数据范围。当公式向下复制时,查找区域依次变为$F$1:$F2、$F$1:$F3、…、$F$1:$F11。COUNTIF函数返回一个由0和1构成的数组,其中0表示该姓名在公式上方未出现过,1表示该姓名在公式上方已出现过。然后用MATCH函数在COUNTIF函数返回的数组中查找第一个0的位置,即查找下一个尚未出现的姓名所在的位置。再利用INDEX函数,根据MATCH函数的结果从C列中返回对应位置的内容。由于数据表有一个标题行,因此,将MATCH函数的结果加1,用于匹配在数据表中的位置。本例中COUNTIF函数的第二参数C$2:C$12比实际数据区域多出一行,目的是当公式复制的行数超出不重复数据的个数时,得到的内存数组中最后一个元素始终为0,从而避免MATCH函数由于查找不到0而返回错误值。

3. COUNTIF函数和MIN函数结合法在H2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键将公式向下复制到单元格显示空白为止。{=INDEX(C:C,MIN(IF(COUNTIF(H$1:H1,C$2:C$11),4^8,ROW($2:$11))))&""}公式中的"IF(COUNTIF(H$1:H1,C$2:C$11),4^8,ROW($2:$11))"部分表示,如果数据在公式之前的范围中出现过,则返回65536;否则返回对应的行号。以H2单元格为例,返回内存数组结果如下。{2;3;4;5;6;7;8;9;10;11}以H3单元格为例,由于H2单元格中的姓名已经在C列出现过,因此返回内存数组结果如下。{65536;65536;65536;5;6;7;8;9;10;11}随着公式的向下复制,用MIN函数依次提取尚未出现的姓名的最小行号。最后用INDEX函数得到该行号对应的姓名。二维数据表提取不重复记录示例26-8    在值班表中提取不重复姓名26-9展示的是某公司各部门值班表的部分内容,需要提取不重复的姓名列表。在F2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键将公式向下复制到单元格显示为空白为止。{=INDIRECT(TEXT(MIN(IF(COUNTIF(F$1:F1,B$2:D$8)=0,ROW($2:$8)*1000+COLUMN(B:D),2^20)),"R0C000"),0)&""}公式使用COUNTIF函数,判断公式所在行之前的区域中是否包含有B2:D8单元格区域中的姓名。如果数据列表中的姓名没有出现过,返回对应的行号乘以1 000加列号,否则返回2^20即1 048 576。行号乘以1000加列号的目的是行号放大1 000倍后再与列号相加,使其后3位为列号,之前的部分为行号,相加时互不干扰,以F2单元格公式为例,此部分的结果如下。{2002,2003,2004;3002,3003,……,6004;7002,7003,7004;8002,8003,8004}再使用MIN函数提取出加权计算后的最小行列号组合值2002。TEXT函数将其转换为"R1C1"引用样式的文本型单元格地址字符串"R2C002"。INDIRECT函数第二参数使用0,表示以"R1C1"引用样式返回对文本型单元格地址字符串的引用。R2C002就是引用工作表中第二行第二列的单元格,即B2单元格。提取指定条件的不重复记录示例26-9    按区域提取不重复客户记录26-10展示的是保险公司客户记录表的部分内容,需要根据G1单元格中指定的客户区域,筛选出该区域不重复的客户编号。在F4单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键将公式向下复制到F9单元格。{=INDEX(B:B,SMALL(IF((MATCH(A$2:A$17&B$2:B$17,A:A&B:B,)=ROW($2:$17))*(A$2:A$17=G$1),ROW($2:$17),4^8),ROW(A1)))&""}公式中的"MATCH(A$2:A$17&B$2:B$17,A:A&B:B,)"部分先使用连接符将区域和客户编号两个字段连接形成单列数据,然后用MATCH函数返回连接后的字符串首次出现的位置。再使用 MATCH 函数的位置结果与序号比较,并结合区域判断条件" (A$2:A$17=G$1) ",让符合区域条件且首次出现的客户编号记录返回对应行号,而不符合区域条件或是重复的客户编号记录返回65536。最后利用SMALL函数从小到大提取出行号,并借助INDEX函数返回对应的客户编号记录。

 


版权声明:本文版权归原作者所有,仅供技术参考;

                 若有违反您个人权益,请留言反馈删除相关信息;


本文链接:http://zyh-c.myds.me:8086/post/82.html

标签: excel

相关文章

学会这些小技巧,加班照样少不了

学会这些小技巧,加班照样少不了

小伙伴们好啊,今天老祝为大家准备了一组简单实用的小技巧,虽然简单,却能解决很多实际问题,咱们一样一样的看:1、用分列计算文本算式就像下图中,B列的文本算式如何计算出正确的结果呢?其实很简单,先依次单击【文件】【 选...

IF函数,专治选择困难症

IF函数,专治选择困难症

小伙伴们好啊,今天咱们说一个看起来特别简单,但是用处特别大的函数——IF。如果有妹纸问你,这个周末准备怎么过?你会说:看天气情况吧,不同的天气,我的选择也不一样。每个包含“如果……那么……否则……”的句子,在Exc...

EXCEL如何计算两个年份间的年数,月数和天数差

EXCEL如何计算两个年份间的年数,月数和天数差

在EXCEL中,我们如果要求两个年份间的年数,月数和天数差,可以用到"DATEDIF"函数,那么具体怎么操作呢?请看如下操作。 方法/步骤 首先,打开需要编辑的数据表,输入你要编辑的数据,点击年数单元格; 在菜单栏点击"公式...

Excel制作带进度条的日程安排表!

Excel制作带进度条的日程安排表!

今天,教大家制作一份好看的日程安排表,一起来看看吧!1准备工作表格中添加一些内容。然后改成这样。2开始制作01.首先,点开「开发工具」-「插入」-「复选框(窗体控件)」,在每行「状态」中插入,然后删其中的文字内容。...

Excel日期函数

Excel日期函数

提取当日的日期“今天”的英文单词为today。在Excel中也有一个TODAY函数。在F5单元格中输入公式“=TODAY()”,如图11-1所示,便得到了当天的日期:2019/6/4。ENTERTITLE图11-1TODAY函数公式得到的今...

运用邮件合并,批量生成各种文档

运用邮件合并,批量生成各种文档

当我们在制作文档主体内容相同,只是具体数据有变化的文档时,就可以灵活运用邮件合并功能,快速批量生成各种文档,不仅可以以邮件的形式批量发送,还可以批量打印,非常快速和方便。1.创建数据源在邮件合并前,需要预先设定或指...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。