今天有一个粉丝朋友问一个问题。他有一列数据,他想找到这列数据里面最后一个非零数字,该怎么办?

看到这个问题,我第一反应,是筛选A列,然后使用CTRL+SHIFT+向下箭头跳转到最后一个数字所在单元格,就可以看到了,最后一个非0数字是87。

但是朋友提出,不想滚动数据,直接用公式来处理。
这倒是给我提了一个新的思路,想了下。我们可以用lookup函数来处理。具体的函数写法参见如下:

我们可以看到,我们使用函数成功获取到了最后一个非0的数字,87。那么,函数写法是啥意思呢?看起来不是普通的lookup函数。
我们先来回顾下lookup函数的语法:lookup函数有三个参数,第一个是查找值,参见excel的公式提示如下:
述(最多18字第二个参数是被查询的数组,我们在这个数组找有没有对应查找值。

第三个参数是结果所在的数组,函数被查询的数组找到了查找值,则返回结果所在数组的对应值。如果找不到查找值,返回最后一个小于等于查找值的对应值

有点绕:我们理解下:
lookup(9,A:A,B:B) 表示,从A:A列查找数值9,如果找到了,且9在A:A的第3行里面,那么返回B:B对应第三行的数据。如果A:A中不包含9,最接近且小于9的值是8,那么就返回8那一行对应B:B的值
。
现在应该好理解了吧?
那么这个函数是如何实现查找一列中最后一个数字呢。其实我们就是利用了这个函数如果找不到值,返回最后一个小于等于查找值指定的结果行的特性。
我们拆解一下这个函数,参见如下图。我们先来理解1/(A:A>0)这个函数,他其实是构建了一个数组,如红框框住的位置,数字大于0的地方,值为1,否则,值为报错值(#DIV/0!),这样子就把非零和小于等于0的数值都过滤掉了。
这样子的话,整个函数就好理解了

紧接着,我们使用lookup函数在1>(A:A>0)这个数组里面查找2,结果值从A:A数组里面对应值获取。因为被查找的数组没有2这个对应值,所以返回最后一个最接近2且小于2的值,是1,刚好位于87数字所在行,所以就查找出来了87.

朋友们,你们觉得这个问题有意思吗?你们有更好的方案不?