今天给大家聊一个数字:9E307,完整的表述是9E+307。在Excel里它属于科学计数法,表示9*10^307,是一个非常接近Excel能够容纳的最大数值的数值。
那这东西有啥用呢?
打个响指,我举几个小例子。
1、忽略错误值求和
如下图所示,B2:B9区域内存在错误值,现在需要在B10单元格求和。
有的朋友会直接使用SUM函数:
=SUM(B2:B9)
结果会返回一个错误值,这是由于SUM函数不会忽视错误值,一旦求和范围内存在,就会返回错误值自身——传说中的一见杨过误终身。
有朋友说,这事简单啊,可以把SUM函数改成下面这样:
=SUM(B2,B4:B6,B8:B9)
小拳拳捶你胸口,你真的好棒棒哦~
……
正确的解答公式是使用SUMIF函数:
=SUMIF(B2:B9,”<9E307″)
SUMIF省略了第3参数求和区域,也就默认使用第1参数的条件区域作为求和区域,求和的条件是小于数值9E307,也就是对所有的数值进行求和。
2、最后的查询
如下图所示,如果需要查询A列最后出现的数值。
这个问题最佳公式是使用LOOKUP函数。
A列最后出现的数值
=LOOKUP(9E+307,A:A)
这是LOOKUP一个固定的套路,当查找值大于查找范围内所有的同类型值时,固定返回最后的同类值。
9E307是一个极大的数值,所以上述公式会固定返回A列最后出现的数值。
把这个套路延伸一下,可以解决两个常见的问题。
如下图所示,A1:M8是数据明细,需要在N列查询每个人最后考评的月份。
所谓最后考评的月份,也就是最后出现数值的月份。
比如,A2单元格的看见星光,最后考评的月份是3月(3月就辞职去看奥运了),A4单元格的肥书记,最后考评月份是12月(8月就把12月的考评得分做好了)
N2单元格输入以下公式向下复制填充即可:
=LOOKUP(9E+307,B2:M2,B$1:M$1)
B2:M2是单行查询范围,B$1:M$1是对应的单行结果范围,9E307比查询范围内所有的同类数据都大,因此返回最后出现的数值对应的月份。
再如下图所示,A列是数据源,需要查询前面出现的连续数值
B列参考公式如下:
=LOOKUP(9E+307,–LEFT(A2,ROW($1:$15)))
LEFT(A2,ROW($1:$15))部分,从A2单元格的左边,依次提取1、2、3、4……直至15位的数据,返回结果:2,20,204,204看,204看见……
再通过减负运算(–),将LEFT函数的计算结果转换为数值。此时纯文本无法进行数学运算,例如–204看,它将返回错误值#VALUE!。
这个部分计算结果是一个内存数组
{2;20;204;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
LOOKUP天生忽略错误值,再用一个比查询范围所有数值都大的9E307进行查询,也就返回最后出现的数值204。
就这么回事。