Excel189 | 在姓名与成绩中剔除指定姓名与成绩(进阶篇)

问题来源

书接上回,开启进阶!

还是用昨天同一组示例数据,稍微变一下表现形式:

只不过,今天不用辅助列了,直接用一个公式,剔除指定姓名,写出保留姓名与成绩。

公式实现

在F2单元格输入公式:

=IFERROR(INDEX(A$2:A$10,SMALL(IF(COUNTIF($D$2:$D$6,$A$2:$A$10),"",ROW($1:$9)),ROW(A1))),""),Ctrl+Shift+Enter结束公式输入。

公式向下、向右填充,会得到剔除指定姓名以后,保留的姓名及对应成绩。

如图:

公式解析

COUNTIF($D$2:$D$6,$A$2:$A$10)

从D2:D5指定的要剔除的姓名区域,依次查找A1:A9所有姓名,查得到的返回1,查不到的返回0。所以此部分公式返回由1与0组成的数组:

{0;1;1;0;1;1;0;1;0 }

ROW($1:$9)

返回由1—9组成的数组:

{1;2;3;4;5;6;7;8;9}

IF(COUNTIF($D$2:$D$6,$A$2:$A$10),"",ROW($1:$9))

此部分公式原理用下图解释:

所以,本部分IF函数的返回值是数组:

{1;"";"";4;"";"";7;"";9}

SMALL(IF(COUNTIF($D$2:$D$6,$A$2:$A$10),"",ROW($1:$9)),ROW(A1))

ROW(A1)的返回值是1,所以,此部分是返回数组{1;"";"";4;"";"";7;"";9}的最小值,即1;公式每往下填充一行,ROW(A1)变为ROW(A2),ROW(A3),ROW(A4)……,此部分SMALL公式就会返回数组{1;"";"";4;"";"";7;"";9}的第2、3、4……小的数值,即4,7,9……;

INDEX(A$2:A$10,SMALL(IF(COUNTIF($D$2:$D$6,$A$2:$A$10),"",ROW($1:$9)),ROW(A1)))

公式在F2中,即是返回A2:A10区域中第1位的数据A1;公式往下填充,即返回A2:A10区域中第4、7、9位的数据A4、A7、A9,即得到了剔除指定姓名以后保留的姓名;

IFERROR(INDEX(A$2:A$10,SMALL(IF(COUNTIF($D$2:$D$6,$A$2:$A$10),"",ROW($1:$9)),ROW(A1))),"")

用IFERROR,如果查找到结果就返回值,如果查不到,出现错误,则返回空值。

保留成绩的计算:

因为公式中的A$2:A$10,使用的混合引用,A列没有锁定,所以,向右填充,会自从变为B$2:B$10,也就是保留的B列的成绩。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • WORD: 1、快速转换英文大小写 按Shift+F3可以快速转换英文大小写格式 2、输入今天的日期 按Alt+S...
    伊丽莎白丽阅读 1,325评论 0 1
  • 做为互联网的一个工作人员,尤其是运营岗位,一天工作时间最多触碰的工具就是excel了,比如数据整理、分析、设计报表...
    韩利阅读 13,181评论 9 204
  • 需要注意的: 虽然 + * 有时可以和 or 、and 互换,但是他们是有区别的,例如:=sum(if(and(A...
    坚持到底v2阅读 3,196评论 0 4
  • 一颗想去看世界的心从八月一直等到十一月,说走就走的冲劲不是时时都有。很庆幸选择了杭州,遇见一座城,从一个故事开始。...
    望凉月阅读 374评论 2 3
  • 最近学C++ Primer,做到第十二章有个习题。要求针对英文文本,对于用户想搜索的单词,打印出该单词在文本中出现...
    sunhaiyu阅读 4,753评论 0 1

友情链接更多精彩内容