你好,我是刘卓。欢迎来到我的公号,excel函数解析。常用函数的小伙伴都知道,在函数中有很多黄金搭档,比如index+match,lookup+frequency等。我个人觉得n+if或t+if才是好基友,它们组成的t/n(if({1},))结构很特别。今天就来分享下这个结构有什么用?
1.计算出最高工资
下图左表展示的是每个人的工资条,最后的工资由基本工资、加班费和补助3部分组成。现在的要求是计算出谁的工资最高以及最高工资是多少。结果如右表所示。
这里我们主要说最高工资是怎么算的?首先算出每个人的工资,然后从中取出最大值就可以了。每个人的工资就是相当于将每一行的数据相加,我们可以用mmult同时计算所有人的工资。
但是这里还有个问题,C2:E11中不只是数字,还有文本。而用mmult的时候,区域中必须全部是数字,否则会出错。
这时,有人可能会想到用n函数,n函数可以把文本转为0。当输入=N(C2:E11)时,结果是为0了,可是只有一个值。因为n和t函数只会对区域中左上角的那个单元格作用。那怎么办?我们可以用if函数将C2:E11这个区域转为数组,然后再用n函数。IF({1},C2:E11)这部分将区域转为数组,注意if函数的第1参数必须是{1}。转为数组后,外面再套n函数,就可以将文本转为0。如下图所示。接下来就可以用mmult,对每行的数字求和了。这样就得到了每个人的工资了。最后用max从这些工资中取出最大工资。完整的公式为=MAX(MMULT(N(IF({1},C2:E11)),{1;1;1}))。
此案例主要是为了展示将区域转为数组的方法,还没有真正见识到n/t(if({1},))结构的作用。下个案列将展示它的作用。
下图左表是一个信息表,如果要求根据G16:G18的序号在左表中查询出对应的部门,并把结果放到H16:H18中,相信99.99%的人都会做。
不过我们现在的问题没有这么简单。现在的要求是查询出G16:G18的序号所对应的工资的总和。也就是vlookup的第1参数要同时查找多个值。我们的公式为=SUM(VLOOKUP(N(IF({1},G16:G18)),A16:E23,5,0)),按ctrl+shift+enter三键。如下图所示,如果把vlookup第1参数中的n(if({1},))去掉,尽管查询的是一个区域,但只返回一个值。因为vlookup第1参数默认是不支持数组的,只能查找一个值。
而当加了t/n(if({1},))结构后,就可以查找多个值了。让本来不支持数组的函数,现在可以支持数组运算了。是不是很不一般?
如果你发现哪个函数不支持数组,那么就可以添加这个结构试一下。比如index第2,3参数也不支持数组。
还有一个不支持数组的函数就是evaluate,这个函数很多人平时用的比较少,所以一般也发现不了。当用了t/n(if({1},))结构后,它也可以支持数组。来看下面的案例。
下表每行都有3个表达式,现在的要求是对每一行3个表达式的结果求平均值。比如第一行3个表达式的结果分别是3,6,8,然后对这3个数求平均值。在D28单元格输入公式=AVERAGE(js),下拉填充。js是一个定义的名称,因为evaluate在微软excel中是一个宏表函数,先要定义名称才能使用。js这个名称的公式为=EVALUATE(T(IF({1},Sheet1!$A28:$C28))),定义名称的步骤就不说了。定义之前,鼠标先选中D28,然后再定义名称,输入公式。
https://pan.baidu.com/s/1_LEg5oBUKkuwqILYewFI2g