14.4 查找与引用函数综合应用 - 下
myzbx 2025-09-03 05:28 6 浏览
一、使返回错误值以简化公式
例 提取一二三级科目名称
在下图所示的科目代码表中,A列为科目代码,B列为对应科目名称。A列科目代码中长度为4的为一级代码,长度为6的为二级代码,长度为8的为三级代码。要求根据A列代码分别提取一级、二级和三级科目名称到D:F列。
选中D2:F2单元格区域,直接输入以下数组公式,按< Ctrl+Shift+Enter >组合键。向下复制公式即可完成。
{=IFNA(VLOOKUP(LEFT(A2&" ",{4,6,8}),$A:$B,2,),"")}
“LEFT(A2, {4,6,8})”部分从A列科目代码中分别从左面第一个字符开始取4、6、8字符作为VLOOKUP函数的第一参数。VLOOKUP函数在D列、E列、F列分别查找4、6、8位科目代码并返回对应的B列科目名称。由于二级科目代码和三级科目代码前4位是一级科目代码,因此,在E列和F列也会返回对应一级科目代码对应的科目名称。
为使E列和F列不再返回对应的一级科目名称,可以使用以下公式,将VLOOKUP函数部分第一参数加4个空格,使VLOOKUP返回错误值。
VLOOKUP(LEFT(A2&" ",{4,6,8}),$A:$B,2,)
公式中“A2&" “”部分的结果为“1001 ”, 在D2单元格中, VLOOKUP函数的第一参数提出“1001 ”左侧的4个字符“1001”;在E2单元格中提取出“1001 “左侧6个字符“1001”;在F2单元格中则提取出“1001 “左侧的8个字符“1001 “。
在D2单元格中,VLOOKUP函数返回与科目代码“1001”对应的科目名称;而在E2和F2单元格中,查找含有空格的科目代码时则返回错误值。
公式在E列查询时,如果A列为4位的一级科目代码,公式将返回错误值。6位和8位的科目代码均返回二级科目代码对应的代码名称。
公式在F列查询时,只有A列代码为8位的三级代码时可以正常返回对应代码名称,A列4位和6位科目代码均返回错误值。
最后用IFNA函数将错误值屏蔽显示为空文本。
二、多条件提取不重复值
例 按产品号和型号不重复值统计金额
如下图所示,A~D列为某厂商产品不同日期销售金额明细,要求在F:H列根据不同产品号和型号统计销售总金额。
在F2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键,填充到F2:G13单元格区域。
{=IFERROR(OFFSET(C$1,SMALL(IF(MATCH($B$2:$B$13&"|"&$C$2:$C$13,$B$2:$B$13&"|"&$C$2:$C$13,0)=ROW($B$2:$B$13)-1,ROW($B$2:$B$13)-1),ROW(B1)),),"")}
以F2单元格公式为例,说明如下。
"MATCH($B$2:$B$13&"|"&$C$2:$C$13,$B$2:$B$13&"|"&$C$2:$C$13,0)=ROW($B$2:$B$13)-1”部分将产品号和型号两个条件用连接符“&”连接在一起,然后判断其自上到下出现的位置是否等于“ROW($B$2:$B$13)-1”。如果相等,公式返回TRUE,表示产品号和型号为自上到下第一次出现。返回值如下。
{TRUE;TRUE:FALSE;TRUE:TRUE:FALSE;TRUE;FALSE;TRUE:TRUE:TRUE:FALSE}
IF函数判断MATCH函数返回值为TRUE时记录其行号-1的返回值,否则返回FALSE。返回结果中的数字表示产品号和型号在B2:C13单元格区域中自上到下第一次出现时的位置。返回值如下。
{1;2;FALSE;4;5;FALSE;7;FALSE;9;1;11;FALSE }
SMALL函数返回符合条件的位置号1。OFFSET函数以B1单元格为引用基准,向下偏移1行0列返回第一个产品号。
当公式向右复制到G列时,OFFSET函数返回第一个型号。
当公式向下复制时,SMALL函数会逐个从小到大输出符合条件的位置号,OFFSET函数会在F列和G列分别返回符合条件的产品号和型号。
当公式向下复制行数超过以产品号和型号两个条件为基础判断的不重复值个数时公式将返回错误值#NUM!,用IFERROR函数将其屏蔽,显示为空文本。
在H2单元格中输入以下公式,复制到H2:H13单元格区域返回同时满足F列和G列产品号及型号条件的“总金额”合计。
=SUMPRODUCT(($B$2:$B$13=$F2)*($C$2:$C$13=$G2),$D$2:$D$13)
三、标记连续符合条件的单元格
例 标记所有连续5个大于10的数字
如下图中,A1:O1单元格区域为随机数字,要求在A3:O3单元格区域将A1:O1单元格区域中所有连续5个大于10的数字都标记出来。例如,E1单元格的数字为11,E1:I1单元格区域5个数字都大于10,因此E1单元要标记。D1单元格的数字为9,在包含D1单元格的所有连续5个单元格区域A1:E1、B1:F1、C1:G1、D1:H1中没有任何一组5个单元格数字都大于10,因此D1不需要标记。
在A3单元格中输入以下公式,并向右复制到03单元格。
=COUNT(0/(COUNTIF(OEESET(A1,,(-4,-3,-2,-1,0),1,5),">10")=5))
公式向右复制时A1会依次变成B1,C1,D1,··,O1。
返回值大于0的表示对应第一行的单元格包含在某组连续5个单元格数字都大于10的单元格区域中。
“OFFSET(A1,(4,-3,-2,-1,0),1,5)”部分以A1 作为引用基准,偏移0行,向左分别移4列、3列、2列、1列、0列,取1行5列,生成包含A1单元格在内的5个单元格区域引用。当OFFSET函数返回的引用超出工作表边缘时返回错误值#REF!。
COUNTIF函数判断生成的5个单元格区域引用中的数字是否大于10。如果生成的某个单元格区城引用中大于10的单元格数量等于5,表示OFFSET通数的第一参数单元格包含在该组连续5个单元格数字都大于 10的单元格区域中。
以F1 单元格为例,“COUNTIF(OFFSET(F1,(4,3,-2,1,0),1,5),">10” 部分返回值如下
{3,4,4,5,5}
表示B1:F1 单元格区域中大于 10的数字个数是3,C1:G1单元格区域中大于10的数字个数是4,D1:H1 单元格区域中大于 10的数字个数是4,E1:1 单元格区域中大于10的字个数是5,F1:J1 单元格区域中大于 10的数字个数是5。
“COUNTIF(OFFSET(F1,(-4,-3,-2,-1,0),1,5),">10")=5”部分表示COUNTIF函数返回的组元素等于5返回TRUE,否则返回FALSE。返回值如下。
(FALSE,FALSE,FALSE,TRUE,TRUE)
用0除以COUNTIF函数返回数组,返回值如下。
(#DIV/0!,#DIV/0!,#DIV/0!,0,0)
最后,COUNT函数返回数组中数字的个数为2,表示F1单元格包含在两组连续5个单元数字都大于10的单元格区域中。
相关推荐
- 掌握JavaScript中的Call和Apply,让你的代码更强大、更灵活
-
在学习JavaScript时,你可能会遇到call和apply这两个方法。它们的作用其实很相似,都是用来调用函数并设置函数内部的this值,但它们的使用方式稍有不同。想象一下,你和朋友们一起拍照。ca...
- 性能调优方面,经常要优化跑的最慢的代码,教你一种快速的方法
-
在我们遇到性能问题的时候,很多时候需要去查看性能的瓶颈在哪里,本篇文章就是提供了多种常用的方案来监控函数的运行时间。1.time首先说明,time模块很多是系统相关的,在不同的OS中可能会有一些精度差...
- call和apply的实现方式_call和apply用法
-
call和apply的实现方式1、函数Function.call()的实现//第一步简单是实现call()varfoo={value:”1”,bar:function(){conso...
- 线上问题排查:接口超时_接口超时时间设置多少合适
-
最近就看到了一个非常厉害的关于“接口超时”问题排查的帖子,从应用排查到内核级别。虽然看到后面的时候我已经有点跟不上了,但是对于整个问题排查的过程还是比较清晰的。(细节不重要,排查思路,方向值得学习)问...
- javascript中的call方法的另一种实现方式-更接近原方法
-
上集我们说到对应的我们自己实现的call方法还是有一点纰漏,这里我们就解决它//一、预备知识(简单介绍)//1、Function.prototype.call()//语法:function....
- 链接器是如何一步步发明出来的?_如何使用连接器
-
在计算机编程的早期年代,你面临一个挥之不去的的噩梦。。。你找了一个刚刚运行成功的程序仔细看了看:; main.asm - 主程序start: &nb...
- Day59:回调(callback)函数_回调 callback
-
定义Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteri...
- 大促数据库压力激增,如何一眼定位 SQL 执行来源?
-
作者:京东科技王奕龙你是否曾经遇到过这样的情况:在大促活动期间,用户访问量骤增,数据库的压力陡然加大,导致响应变慢甚至服务中断?更让人头疼的是,当你试图快速定位问题所在时,却发现难以确定究竟是哪个业...
- 一键追欠料!WPS表格实战MRP欠料计算-7
-
昨天第6章内容主要聚焦于本报表的核心欠料运算。通过子件库存的引用以及累计需求的计算,计算出了子件的累计欠料。累计欠料的显示方式是按日期进行逐日累加,并不能清晰的看到每张订单欠料多少?所以在今日第7章的...
- Python教程(二十五):装饰器–函数的高级用法
-
今天您将学习什么什么是装饰器以及如何创建装饰器函数装饰器和类装饰器带参数的装饰器装饰器的实际应用真实世界示例:日志记录、性能监控、缓存、权限验证什么是装饰器?装饰器是Python中的一种...
- 在 Excel 日历制作中,尤其是动态日历方案,会用到的多个函数详解
-
在Excel日历制作中,尤其是动态日历方案,会用到多个核心函数。下面我将详细解析这些函数的作用、参数和使用技巧:核心日期函数1.DATE(year,month,day)作用:创建指定日期参...
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
-
简介不管是JNI还是JNA,最终调用的都是native的方法,但是对于JAVA程序来说,一定需要一个调用native方法的入口,也就是说我们需要在JAVA方法中定义需要调用的native方法。对于JN...
- 14.4 查找与引用函数综合应用 - 下
-
一、使返回错误值以简化公式例提取一二三级科目名称在下图所示的科目代码表中,A列为科目代码,B列为对应科目名称。A列科目代码中长度为4的为一级代码,长度为6的为二级代码,长度为8的为三级代码。要求根据...
- 记一次酣畅淋漓的JavaScript逆向_js逆向webpack
-
背景介绍今天在写爬虫的练习题时遇到了这样一个难题:目标资源是一个图片的url,但是不同于以往的情况,我在http响应记录里搜索这个图片的url,发现并不能搜到。从逻辑上来讲,这个url被展示到浏览器上...
- 「Postman」测试(Tests)脚本编写和断言详解
-
测试确认您的API按预期工作,服务之间的集成运行可靠,并且新开发没有破坏任何现有功能。您可以使用JavaScript为PostmanAPI请求编写测试脚本。当您的API项目出现问题时...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)