打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
返回(第)N条数据

经常碰到一些题目,要求返回某某某第1条数据,第N条数据,最后一条数据,所有数据等等。

下面通过一个简单的栗子,来分享一些方法。

数据源:


第一条数据:(以张三为栗子)

1、vlookup默认返回所有数据的第一条数据。

=VLOOKUP(D1,A1:B11,2,0)

除了vlookup还可以应用match函数

match精确查找,默认返回的也是第一条数据所在的位置(行号)

=INDEX(B:B,MATCH(D1,A1:A11,0))

这两个公式,index match效率会高不少。



最后一条数据:lookup

=LOOKUP(1,0/(A2:A11=D1),B2:B11)

下面就A2:A11=D1这个结构来说说如何构建数组。

A2:A11=D1,遍历A2:A11中每一个单元格,如果单元格是张三,那么就返回true,否则返回false,抹黑A2:A11=D1,按f9得出下列数组。

{TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}

然后,再进一步处理该数组,将其转换为数值形式的数组。

我们要先知道,true和false也是可以用来做运算的。

比如:1 TRUE=2,1 FALSE=1;那么在算是中true=1,false=0(注意,true并不一定等于1,false并不一定等于0,只是在算式中才会这样,有时候只是单纯的逻辑判断结果。)

 0/(A2:A11=D1)即:

0/{TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}

也就是0/1=0,0/0返回#DIV/0!,上述结果为:

{0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!}

再运用lookup函数,查找1,在

{0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!}

中查找,显然是找不到正确的结果。那么lookup函数就会返回比1小的最后一个数字,也就是最后一个0的位置。

.....

所以,这样就找到了张三的最后一条数据。


当然,我们也可以这样来构建数组。

1、A1:A11=D1,构建单元格返回等于“张三”的数组,返回

{FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}

2、既然我们已经知道True=1,False=0;那么我们可以用行号来做文章。

构建行号一般用ROW函数,如row(B1:B11)或row(1:8),返回结果

{1;2;3;4;5;6;7;8;9;10;11},表示1到11行

3、将1、2两个数组相乘

(A1:A11=D1)*ROW(B1:B11)

           ⬇

{FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}*{1;2;3;4;5;6;7;8;9;10;11}

           ⬇

{0;2;0;0;5;0;0;8;0;0;0} 


至此,我们看到,凡是数组中大于0的数字,都是张三所在的行号,我们取最大的数值即可,使用max函数,公式为:(数组公式,需ctrl shift enter三键一起按)

=MAX((A1:A11=D1)*ROW(B1:B11))

由此,得出,张三最后一条数据所在的行号为8,那么返回其最后一条数据的方法就很多了,可以使用index,offset,indirect等等。

=INDEX(B:B,MAX((A1:A11=D1)*ROW(B1:B11)))

=OFFSET(B1,MAX((A1:A11=D1)*ROW(B1:B11))-1,)

=INDIRECT('b'&MAX((A1:A11=D1)*ROW(B1:B11)))


除了用max函数,我们也可以用match函数来构建数组

=MATCH(0,0/(A1:A11=D1),1),数组三键后,返回结果  8;得出张三的最后一条数据所在的行号。



返回张三的所有数据。

函数:index small if的万金油公式,此公式在这里就不再多说,这是一条很出名的公式,百度一下就很多很多。


函数辅助列:

=COUNTIF(A$2:A2,A2),相对引用单元格区域,对张三进行计数

添加辅助列之后,要引用那一条数据就用可以引用那一条数据,或者所有数据。

1、所有数据:sumifs

=SUMIFS(B:B,A:A,$D$1,C:C,ROW(A1))

2、所有数据:lookup

=LOOKUP(1,0/(($A$2:$A$11=$D$1)*($C$2:$C$11=ROW(A1))),$B$2:$B$11)

或者改变辅助列的公式为:

=A2&COUNTIF(A$2:A2,A2)

=INDEX(B:B,MATCH(D$1&ROW(A2),$C$1:$C$11,0),)

=LOOKUP(1,0/($C$2:$C$11=$D$1&ROW(A1)),$B$2:$B$11)

辅助列的方法,其实是十分灵活简单有效率的,比单纯的万金油公式在实际运用中要好得多。

用辅助列的方法可以得出任意第N条数据。

辅助列,甚好。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel如何查找指定数据最近出现的一条数据?这2个方法你还不会吗
Excel公式技巧63:查找最后一行
这个Excel查找匹配问题着实难住了我,猜你也不会
如何在Excel中判断是否有重复数据出现
Excel模糊查找学会这5个方法,工作简直开了挂!
Excel隔N行求和,你是不是在找这条公式模板?收藏备用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服