VLOOKUP函数不能查找最后一个值,怎么办?
VLOOKUP函数是使用最多的Excel函数之一,能够查找到第一个值并返回对应的值,然而,如果查找的项有多个,如何查找到最后一个值呢?
举个例子,如下图1所示的数据,要查找“员工15”的最后一项工作任务。
图1
下面列举几种常用的方法,供大家参考。
方法1:找到要查找的最后一项任务所在的位置,并获取其值。
先将单元格区域A2:A16中的值与要查找的值(在单元格E2中)相比较,最后相同的值肯定其对应的行号最大。
A2:A16=E2
得到数组:
{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE}
ROW(A2:A16)
得到数组:
{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16}
将上述数组作为IF函数的参数:
IF({FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE},{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16},0)
得到数组:
{0;0;0;0;0;0;0;9;10;11;0;0;0;0;0}
取其最大值:
MAX({0;0;0;0;0;0;0;9;10;11;0;0;0;0;0})
得到:
11
即为所查找值对应的最后一项所在位置。
传递组INDEX函数取值:
=INDEX(B1:B16,11)
因此,完整的公式为:
=INDEX(B1:B16,MAX(IF(A2:A16=E2,ROW(A2:A16),0)))
这是一个数组公式,输入完后要按Ctrl+Shift+Enter组合键。
或者,数组公式:
=INDEX(B2:B16,MAX(ROW(A1:A16)*(A1:A16=E2))-ROW(A1))
其原理相同,只是使用了乘法代替上面公式中的IF函数。
或者,数组公式:
=INDIRECT('B'&LARGE(IF(A1:A16=E2,ROW(A1:A16)),1))
找到要获取的值的单元格位置,使用INDIRECT函数取其值。
方法2:经典的LOOKUP函数公式。
=LOOKUP(2,1/(A2:A16=E2),B2:B16)
利用LOOKUP函数的特性,找取最后一个出现的值,并将其取出。
还有其它的方法吗?欢迎留言。
注:有兴趣的朋友可以到知识星球完美Excel社群下载本文配套示例工作簿。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。