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