EXCEL 如何查找最后一行,万能查找法
1、【2大难点】
解决这个问题有2 个难点:
1、从第一行到最后一行之间数据可能不连续,有空白;
2、最后一行的数据是文本还是数字是未知数,或者是数字与文本的混合,如何找共性。
那么面对下图所示的图表我们该怎么办呢?
2、【如何突破】
1、MATCH()函数的默认查找方式有个规则
规则:当用默认方式查询时(即最后个参数省略),如果匹配不到准确值,则返回最后一条有效数据所处的位置。
我提供的两种方法都是基于这个规则,不管数据中间是否有空白或不连续都成立。
3、【第2难点分析】
那有人要问了,这个规则随便应用就可以解决掉2大难点啦,还要用卖官子吗。
当然有必要了,举个例子:
图中的区域中我们来查找最后一行,三列数据格式分别是文本、文本、数字;
公式:=MATCH(CHAR(1),A:A,-1) 返回结果 17
=MATCH(CHAR(1),B:B,-1) 返回结果 17
=MATCH(CHAR(1),C:C,-1) 返回结果 12
4、从上述结果可以看出,公式=MATCH(CHAR(1),C:C,-1) 不能返回正确的行号。
原因是这个查找空白单元格的方法对于数字格式的单元格是无效的。
所以不能用该方法。
1、【原理】
布尔值说白了就是真、假(True、False)两种值,我们把所有的查找列对象转换为True或者False(在EXCEL 中True、False是由1、0来代表的),然后再来用MATCH()函数来查找最后一行。
2、【将对象转换为True、False】
判断是否不为空,如果是则True,否则False ,
我们将整列数据转换过来的数组公式为: 1/A:A<>""
这样来到的数组为{1;1;1;#DIV/0!,#DIV/0!,1,#DIV/0!,#DIV/0!,#DIV/0!}
如果再来查找值2(其实2或者2以上的数都成立),依据MATCH()函数规则,则返回最后一行的位置。
3、【实操】
在对应三个查找单元格中分别输入公式:
=MATCH(2,1/(A:A<>""))
=MATCH(2,1/(B:B<>""))
=MATCH(2,1/(C:C<>""))
4、【显示结果】
得到结果均为17,完全一至。
这个方解决了题出的2大难点,无论是否不连续,无论是文本还是数字还是说是数字与文本的混合情况都成立。
1、【序言介绍】
在介绍方法之前,我给大家介绍一下EXCEL 的一个内部秘密,它是一个数字“9E+307”
这个数字是EXCEL中可以计算的最大的数字,这是个非常规数字。
此方法我们就会要用到这个内部数字来实现查找。
2、【原理】
既然数字“9E+307”是EXCEL中可以计算的最大的数字,那么代表着所有单元格的数字都是 <= 数字“9E+307”的。
正常来说当EXCEL中用MATCH()函数查找数字“9E+307”时,是找不到等值的,那么依据前述的MATCH()函数的规则,它将返回最后一行的位置。
如果被查找对象的格式不是数字而是文本,或者是数字与文本的混合,那么我们再用文本查找方法来实现,这样两者合一就万无一失了。
3、【实操】
在对应三个查找单元格中分别输入公式:
=MAX(MATCH(9E+307,A:A),MATCH(CHAR(1),A:A,-1))
=MAX(MATCH(9E+307,B:B),MATCH(CHAR(1),B:B,-1))
=MAX(MATCH(9E+307,C:C),MATCH(CHAR(1),C:C,-1))
4、【显示结果】
从显示的结果来看,公式是完全正确的。
之所以加入干扰因子,是让大家明白这个公式的正确使用的用意。
请看如下分步执行过程,
每个公式在本例中均有两个结果,原因是加入干扰因子的结果。但是最终有效的是最大的那个值。
1、 对于只用单元格公式求解最后一行的办法,我这列举了个人用得非常满意的方法。当然如果用VBA 的话,实现起来也是非常简单。后面我还会给大家介绍VBA 方法来解决的经验。
不管是布尔值查找法,还是非常规查找法,我也给大家非常多的原理介绍了。如果还有不明之处,请真的留言。