HI,大家好,我是星光。

今天给大家聊一个数字: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。
就这么回事。

?案例文件下载百度网盘…
https://pan.baidu.com/s/1FAjTEeS1-8Yy5cNWikYJ9w
提取码: hf77

声明:本站所有文章均出自互联网,只为学习之用;如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。