第三批:
31.查找最后一家单位跟金额
公司每天都会收到其他单位的付款金额,现在想查询最后一天是哪家单位付款及付款金额?
单位全称:
=LOOKUP("座",B:B)
金额:
=LOOKUP(9E+307,C:C)
原理分析
为了更好的了解公式的含义,我们先看看下面几条公式。
=LOOKUP(10,{1;2;3;9;5;6;7;8;4})
返回4。
=LOOKUP(100, {1;2;3;9;5;6;7;8;4})
返回4。
=LOOKUP(1000, {1;2;3;9;5;6;7;8;4})
返回4。
也就是说,LOOKUP函数查找到最后一个满足条件的值,在数字不确定的情况下,查找的值越大越能保证查找到的值得准确性。9E+307是一个很大很大的数字,Excel允许最大的数字不能超过15位,而9E+307是9乘以10的307次方,比最大值还要大,查找最后一个值是相当保险。座是一个接近最大的文本,当然类似于々这种生僻字比座还大,但正常情况下不会出现,所以就用座来查找最后一个文本。
32.查找数量最后及最早出现的时间
日期是升序的情况下如何查询每个数量最后一次出现的时间(日期最大),最早出现的时间(日期最小)?
最后时间:
=LOOKUP(1,0/(B:B=D2),A:A)
最早时间:
=VLOOKUP(D2,IF({1,0},B:B,A:A),2,0)
原理分析
通过前面的案例知道LOOKUP函数可以查找的时候是返回最后一个对应值,而VLOOKUP函数查找的时候是返回最早一个对应值,也就是首次出现。
我们知道VLOOKUP函数的查找值需要在最左列,而不能从右边从左边找。在最开始认识这个函数的时候,提到辅助列方法,其实也可以利用一个函数进行构造一个新区域。
对于IF({1,0},B:B,A:A)进行构造的区域,先分成几步,慢慢说明。
在单元格输入下面2条公式,参数1为1的时候,返回左边,参数1为0的时候,返回右边。
=IF(1,"左边","右边")=IF(0,"左边","右边")
在单元格重新输入下面2条公式,然后在编辑栏用F9键进行解读。{1,0}这种形式,还是按原来的顺序显示,而{0,1}这种形式会将顺序调换。也就是说通过改变1跟0的位置,可以调换内容的前后位置。
=IF({1,0},"左边","右边")=IF({0,1},"左边","右边")
将参数2跟参数3换成区域,就可以将两列的数据调换好位置,构成一个新区域。我们现在需要B列在前,A列在后,所以可以这样写公式。
=IF({1,0},B:B,A:A)=IF({0,1},A:A,B:B)
VLOOKUP函数在新区域中,是返回第2列的对应值。
=VLOOKUP(D2,新区域,2,0)
将新区域替换成中间构成的公式即可。
=VLOOKUP(D2,IF({1,0},B:B,A:A),2,0)=VLOOKUP(D2,IF({0,1},A:A,B:B),2,0)
最后说明一点,用整行整列的话看起来简洁一点,但运算速度会稍微慢点,数据量比较大的时候,建议使用实际有内容的区域。
=VLOOKUP(D2,IF({0,1},$A$2:$A$18,$B$2:$B$18),2,0)
33.多条件查找对应的数量
左边有四列数据,右边用日期、组别、型号这三个条件,如何查询到对应的数量?
=SUMIFS(D:D,A:A,F2,B:B,G2,C:C,H2)
原理分析
查询对应值我们想到的就是借助查询函数,但有时是可以例外的。因为我们现在查找后返回的是数值,其实也可以借助求和函数进行查找。单条件就用SUMIF函数,多条件就用SUMIFS函数,查找的时候非常方便。
SUMIFS函数语法如下:
SUMIFS(求和区域,条件区域1,条件1,[条件区域2],[条件2],……)
用求和函数还有一个好处,就是当没有对应值的时候显示0,而不是错误值。如现在将B2的内容改成卢子,用VLOOKUP函数查找的会得到#N/A,而SUMIFS函数得到的是0。
如果查询返回的是文本,用LOOKUP函数也同样可以。
LOOKUP函数查询对应值有一个通用的公式:
LOOKUP(1,0/((条件1)*(条件2)*……*(条件N)),返回区域)
有了这个公式,查询对应值变得非常简单。
34.根据产品编号查询产品名称及单价
参数表是事先将产品的各项信息录入好,查询表是每天要输入的信息。如何只输入产品编号,产品名称及单价就自动查询出来,而不用手工输入?
=VLOOKUP($B10,$A$2:$C$6,COLUMN(B1),0)
原理分析
VLOOKUP函数可以通过改变第3参数而返回各项对应值,现在要获取第2,3列的对应值。
=VLOOKUP($B10,$A$2:$C$6,2,0)=VLOOKUP($B10,$A$2:$C$6,3,0)
如果项目少,更改几次参数也没什么,但项目多了,肯定不方便。产生序号可以用ROW函数跟COLUMN函数,因为是要获取列号,所以用COLUMN函数。COLUMN(B1)就是表示从第2列开始,往右复制公式就变成3。
35.根据姓名或者工号查询工资
在查询工资的时候,有的人是报姓名,有的人是报工号,现在如何根据其中任意条件,查询到工资呢?
=IFERROR(VLOOKUP(E2,A:C,3,0),VLOOKUP(E2,B:C,2,0))
原理分析
单独用一个VLOOKUP函数的时候,只能查询到一部分。比如用VLOOKUP(E2,A:C,3,0)只能查询到姓名对应的工资,而工号对应的工资就得不到。相反用VLOOKUP(E2,B:C,2,0)只能查询到工号对应的工资,而姓名对应的工资查找不到。而两者结合起来,就刚好可以找到所有工资。
VLOOKUP函数查询对应值的时候,如果查找不到对应值会显示错误值#N/A,我们可以借助错误值这个特点来将两个公式合并。IFERROR函数可以让错误值显示成任意值,不是错误值显示本身。
IFERROR函数语法如下:
IFERROR(值,错误值要显示的结果)
也就是说如果VLOOKUP(E2,A:C,3,0)查询的时候没错误值,就用VLOOKUP(E2,A:C,3,0)进行查询,有错误就用VLOOKUP(E2,B:C,2,0)。
36.根据姓名简称及月份查询工资
汇总表是各人员一到四月份的工资,现在要根据姓名简称及月份两个条件查询工资,该如何做呢?
=VLOOKUP("*"&B10&"*",A1:E8,MATCH(B11,A1:E1,0),0)
原理分析
因为使用的是简称,所以不能直接查询,需要跟通配符一起连用才可以。通配符说明:*代表所有字符,?代表一个字符。
如"*今朝*"只要数据源包含今朝两个字都能查到,汇总表只有一个包含今朝,也就是可以查找到笑看今朝。
返回第几列的值,这个由MATCH函数决定,这个函数就是获取某值在区域中的排位。
37.多表查询各地区店名的工程造价
有三个地区,分别是无锡、响水和苏州,各自的信息记录在三张表格,每个表格的格式都是一样的。如何根据地区跟店名在三个表格中查询造价?
使用公式:
=VLOOKUP(B2,INDIRECT(A2&"!B:C"),2,0)
原理分析
正常跨表查询都是这样写公式的:
=VLOOKUP(B2,无锡!B:C,2,0)=VLOOKUP(B2,响水!B:C,2,0) =VLOOKUP(B2,苏州!B:C,2,0)
如果用这个A2&"!B:C"作为第2参数,结果是错误的。直接用&得到的只是一个文本,得通过INDIRECT函数间接引用才能转换成一个真正的区域。
这些查找函数,你觉得谁最厉害?
第三部分就先分享到这里,记得点赞收藏。