手把手教你,学会单条件和多条件的筛选 2024-05-24 02:48:13 筛选符合单个指定条件的记录示例26-1 提取销售1组的记录如图26-1所示,A~D列是某企业销售记录表的部分内容,需要根据G1单元格中指定的组别,提取出该组别的全部记录。在F4单元格中输入以下数组公式,按<Ctrl+ Shift+Enter>组合键,将公式复制到F4:I9单元格区域。{=INDEX(A:A,SMALL(IF($B$2:$B$12=$G$1,ROW($2:$12),4^8),ROW(A1)))&''}公式中的“IF($B$2:$B$12=$G$1,ROW($2:$12),4^8)”部分,首先使用IF函数判断B列的组别是否等于G1单元格指定的组别,如果B2:B12单元格区域中的组别等于指定组别,则返回对应的行号;否则返回一个较大的数值“4^8”,即6 5536,结果如下。{2;65536;4;65536;6;65536;65536;65536;10;65536;12}“ROW(A1)”部分返回A1单元格的行号, 由于A1单元格中使用了相对引用,公式向下复制时,会依次得到A2,A3,A4,…单元格的行号,也就是一组生成递增的数值。SMALL函数使用“ROW(A1)”的结果作为第二参数,从以上内存数组中,从小到大依次提取行号。INDEX函数以SAMLL函数的结果作为索引值,从A列中提取出对应位置的业务员名单。第一参数A:A使用相对引用,当公式向右复制时,要提取的数据范围随之发生变化,最终提取出符合条件的所有记录。当SMALL函数返回结果为6 5536时,INDEX函数引用指定列中第6 5536行的单元格,一般数据表格中这个位置为空白内容,所以INDEX函数得到空白单元格的引用,最终返回无意义的0。公式最后连接空文本,目的是屏蔽无意义的0值,使其在单元格中显示为空白。在公式最后连接空文本后,公式得到数值结果将变成文本格式,不能直接进行求和汇总。如果对公式结果有进一步的汇总需求,可以使用以下公式实现相同的提取效果,并且公式得到的数值结果能够直接求和汇总,如图26-2所示。{=IF(ROW(A1)<=COUNTIF($B:$B,$G$1),INDEX(A:A,SMALL(IF($B$2:$B$12=$G$1,ROW($2:$12),4^8),ROW(A1))),'')}“ROW(A1)<=COUNTIF($B:$B,$G$1) ”部分先使用“COUNTIF($B:$B,$G$1)”统计出B列的组别中符合指定组别的个数,然后与ROW(A1)进行比较。当公式向下复制时,如果公式行数大于指定的组别个数,IF函数返回空文本,否则执行INDEX函数部分的提取公式。示例26 提取指定的产品记录如图26-3所示,需要根据G1单元格中指定的产品名称,从A~D列中提取出该产品的全部记录。在F4单元格中输入以下数组公式,按<Ctrl+Shift+En ter>组合键,将公式复制到F4:I9单元格区域。{=INDEX(A:A,SMALL(($C$2:$C$12<>$G$1)/1%%+ROW($2:$12),ROW(A1)))&''}公式中的“($C$2:$C$12<>$G$1)/1%%+ROW($2:$12)”部分,先判断C2:C12单元格区域中的产品名称是否不等于G1单元格中指定的产品名称,如果条件成立则返回逻辑值TRUE;否则返回逻辑值FALSE,结果如下。{TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;FALSE}然后用以上内存数组除以1%%,相当于乘以10 000,得到以下结果。{10000;0;10000;10000;10000;10000;10000;0;10000;10000;0}用这个新的内存数组加上行号,结果如下。{10002;3;10004;10005;10006;10007;10008;9;10010;10011;12}也就是数据区域中不等于指定产品的,所在行号加上了10 000;而等于指定产品的返回所在行号本身。最后使用SMALL函数从小到大依次提取出行号信息,INDEX函数以此作为索引值,返回对应位置的内容。同一字段中的多条件筛选示例26-3 筛选销售额在指定区间的记录如图26-4所示,需要根据 G1单元格中指定的销售额下限和G2单元格中指定的销售额上限,从A~D列中提取出指定区间的全部记录。在F5单元格中输入以下数组公式,按<Ctrl+Shift +Enter>组合键,将公式复制到F5:I10单元格区域。{=INDEX(A:A,SMALL(IF(($D$2:$D$12>=$G$1)*($D$2:$D$12<=$G$2),ROW($2:$12),4^8),ROW(A1)))&''}AND函数和OR函数不能生成内存数组结果,因此,在数组公式中表示多个条件的“与”关系时,需要使用乘法表示。表示多个条件的“或”关系时,需要使用加法表示。公式中的两个判断条件“($D$2:$D$12>=$G$1)”和“($D$2:$D$12<=$G$2)” 分别得到两组由逻辑值TRUE和FALSE构成的内存数组。使用乘法,表示两个条件是“与”的关系。将两组内存数组中的元素对应相乘,如果两个条件同时符合,即相当于“ TRUE*TRUE ”,结果为1。如果两个条件符合其一或是均不符合,即相当于“ TRUE*FALSE ”或是“ FALSE*FALSE ”,结果为0。当IF函数的第一参数为1,也就是两个条件同时符合时,返回对应的行号,否则返回数值65 536。最后使用SMALL函数从小到大依次提取出行号信息,INDEX函数以此作为索引值,返回对应位置的内容。同一字段多条件符合其一的筛选示例26-4 提取不同产品的记录如图26-5所示,需要根据G1 单元格和G2单元格中指定的产品名称,从A~D列中提取出两个产品的全部记录。在F5单元格中输入以下数组公式,按<Ctrl+Shift+Ent er>组合键,将公式复制到F5:I12单元格区域。{=INDEX(A:A,SMALL(IF(($C$2:$C$12=$G$1)+($C$2:$C$12=$G$2),ROW($2:$12),4^8),ROW(A1)))&''}公式中的两个判断条件“($C$2:$C$12=$G$1)”和“($C$2:$C$12=$G$2)” 分别得到两组由逻辑值TRUE和FALSE构成的内存数组。使用加法,表示两个条件是“或”的关系。将两组内存数组中的元素对应相加,如果两个条件符合其一,逻辑值“ TRUE+FALSE ”结果为1;如果两个条件均不符合,即相当于“FALSE+FALSE”,结果为0。然后使用IF函数进行判断,如果两个条件符合其一时,返回对应的行号,否则返回数值65 536。最后使用SMALL函数从小到大依次提取出行号信息,INDEX函数以此作为索引值,返回对应位置的内容。使用以上方法时,如果要指定的条件比较多,则需要设置多个判断条件,然后使用加法进行判断,不但公式冗长,而且容易出错。实际应用时,可以将判断条件作为一个区域整体引用。在F5单元格中可以输入以下数组公式,按<Ctrl+Shift+Enter>组合键,将公式复制到F5:I12单元格区域。{=INDEX(A:A,SMALL(IF($C$2:$C$12=TRANSPOSE($G$1:$G$2),ROW($2:$12),4^8),ROW(A1)))&''}TRANSPOSE函数的作用是对数据区域进行转置。使用TRANSPOSE函数,将G1:G2单元格区域中两个垂直方向的条件转置为水平方向。然后使用C2:C12单元格区域中的每个元素与之依次对比,得到由逻辑值构成的11行两列的内存数组。{TRUE,FALSE;FALSE,TRUE;FALSE,FALSE;……;FALSE,FALSE;FALSE,TRUE}IF函数根据以上内存数组,返回对应的行号或是65 536,结果如下。{2,65536;65536,3;65536,65536;……;65536,65536;65536,12}最后使用SMALL函数从小到大依次提取出行号信息,INDEX函数以此作为索引值,返回对应位置的内容。多个字段的筛选使用公式进行多个字段的筛选与同一字段中的筛选公式类似,主要是对条件区域范围的选择不同。示例26-5 筛选指定组别指定产品的记录如图26-6所示,需要根据G1单元格中的组别和G2单元格中的产品名称,从A~D列中提取出符合两个条件的全部记录。在F5单元格中输入以下数组公式,按<Ctrl+Shift+E nter>组合键,将公式复制到F5:I8单元格区域。{=INDEX(A:A,SMALL(IF(($B$2:$B$12=$G$1)*($C$2:$C$12=$G$2),ROW($2:$12),4^8),ROW(A1)))&''}公式将“($B$2:$B$12=$G$1)”和“($C$2:$C$12=$G$2)”两个判断条件得到的逻辑值对应相乘。如果B列的组别等于G1单元格中指定的组别,并且C列的产品等于G2单元格中指定的产品,IF函数返回对应的行号,否则返回65 536。再使用SMALL函数从小到大提取出行号后,由INDEX函数返回对应单元格的内容。筛选包含关键字的记录示例26-6 筛选包含关键字的记录如图26-7所示,需要根据G1单元格中的产品关键字,从A~D列中提取出符合该条件的全部记录。在F5单元格中输入以下数组公式,按<Ctrl+Shift+Enter >组合键将,公式复制到F5:I10单元格区域。{=INDEX(A:A,SMALL(IF(ISNUMBER(FIND($G$1,$C$2:$C$12)),ROW($2:$12),4^8),ROW(A1)))&''}“FIND($G$1,$C$2:$C$12)”部分使用FIND函数以G1单元格中指定的关键字作为查找对象,在C2:C12单元格区域中查找该关键字在每个单元格中首次出现的位置。如果单元格中不包含指定的关键字,FIND函数返回错误值,否则返回表示位置的数字,该部分公式得到内存数组结果如下。{#VALUE!;1;1;#VALUE!;#VALUE!;1;#VALUE!;1;#VALUE!;#VALUE!;3}再使用ISNUMBER函数判断以上内存数组中的每个元素是否为数值,结果如下。{FALSE;TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE}ISNUMBER函数判断后返回逻辑值TRUE的,就是包含关键字的单元格,IF函数返回对应的行号,否则返回65 536。最后使用SMALL函数从小到大提取出行号后,由INDEX函数返回对应单元格的内容。 赞 (0) 相关推荐 10个示例让你的VLOOKUP函数应用从入门到精通(下) 示例6:使用通配符进行部分查找 当需要在列表中查找一个值但没有完全匹配时,需要部分查找. 如图11所示,如果想要查找列表中的"长江",但是列表中只有"长江发电集团&quo ... 公式解读 | 庖丁就牛Excel'万金油'公式 欢迎大家继续学习Excel技巧1001系列,第21期 今天我们就来一期"庖丁解牛" 说说那人见人爱,使用了数年的"万金油"公式-INDEX(SMALL(IF() ... 如何用函数在不同部门间插入空行? -01- 案例说明 下图A列是数据源,记录的是各个部门,相同的部门是排在一起的.现在的要求是在不同部门间插入一个空行,结果如D列所示. 如果你遇到这个问题会怎么做,可以先想一下,再往下看. -- -0 ... 这个Excel查找匹配问题着实难住了我,猜你也不会 前几天小必老师无意中做到了一个题目,是关于一个查询的问题,其中这个查询呢,是带有合并单元格的.下面的问题仅提供于训练函数的解决思维,实际工作中可提供自身的情况选择适合自己的一些就方法. 题目:按右边的 ... 8步手把手教你学会薪酬设计 上次说到薪酬诊断方法,就像医生看病一样,有问题需要良方下单开药,方能治理企业"顽疾",今天就聊聊如何进行薪酬设计. Part 1薪酬结构定义 广义结构:对统一组织内部的不同职位或者 ... 隶书入门,动态图示范练习,手把手教你学会! 隶书入门,动态图示范练习,手把手教你学会! 手把手教老年人学会使用验证码登录软件,再也不用担心忘记密码了 手把手教老年人学会使用验证码登录软件,再也不用担心忘记密码了 手把手教你学会森林图绘制 大家好,今天我们来讲一讲用R做森林的方法.森林图在R中最方便的实现方法是使用"forestplot"包. 下面进入正题. 01 安装加载包,设置工作路径 install.packa ... 微信中4个冷门的小技巧,每个都超实用,手把手教你学会 一.朋友圈快速搜索 4.打开朋友圈后在搜索栏输入要搜索的内容 5.比如说:"大家",输入后我们按下回车键 6.这时就会列出包含"大家"关键字的所有内容 有了这个 ... 手把手教你学会制作中药秘方——牛黄清心丸... 牛黄清心丸--言语不清.怔忡恍惚.惊恐虚烦.神志昏乱... 手把手教你学会如何看两日弱转强模式,打板搏溢价(图解) 打板客更多重视分时板的质量,分时板有利也有弊,第二天溢价概率大,但不稳定,正确率低.哪一种打板方式,可以获取稳定的收益呢? 那就是,两日弱转强打板模式,操作简单,会看板就行. 对于弱转强,每个人都有自 ... 手机照片如何添加文字?原来方法这么简单,手把手教你学会 手机照片如何添加文字?原来方法这么简单,手把手教你学会 手把手教你学会龙头股的涨停板打板战法(图解) 炒股要炒龙头股.龙头股是什么,就是连续涨停的股票.阻击涨停板股票,就是K线短线战术的精要.阻击涨停板是冒险家的游戏,股市顶级高手的天堂,普通投资者的地域.不是顶级高手,请轻易不要参与这个游戏,参与者, ...