上一篇文章介绍了,如何利用SUMIFS函数代替查找函数做多条件查找,这只能在查找结果是数值的情况下才能用。
如果查找结果是文本字符串呢?
此时,可以联合使用MATCH函数和INDEX函数做数组公式。
下图是一个例子,要求把每个人的最新职称及获取时间提取出来。

所谓最新职称及获取时间,就是每个人的最大日期(因为最新时间嘛)及其对应的证书名称,因此可以先计算每个人的最大日期,然后再提取证书名称。
提取每个人的最大日期是下面的数组公式(高版本可以直接使用MAXIFS函数,这里重点介绍数组公式的实现方法):
=MAX(IF($A$2:$A$10=F2,$C$2:$C$10,""))
这个公式的含义是:先用IF函数判断A列的哪些单元格是指定的姓名,如果是,就把C列的日期留下来,如果不是,就用空值代替,这个判断的结果,是一个由具体日期和空值组成的数组:
{"";"";41433;"";"";"";"";"";""}
再用MAX函数,计算这组数的最大值:
MAX({"";"";41433;"";"";"";"";"";""})
就得到了某个人的最新证书日期。
提取最新证书名称是下面的数组公式:
=INDEX($B$2:$B$10,MATCH(F2&I2,$A$2:$A$10&$C$2:$C$10,0))
这个公式的含义是:
(1)使用INDEX函数准备从B列提取证书名称;
(2)从第几行提取数据呢?使用MATCH函数来定位;
(3)最新证书名称的行号位置,是由两个条件组成的:
在A列判断姓名;
在C列判断是否为该姓名的最大日期;
因此在公式中,将A列和B列做字符串连接,生成一个数组:
$A$2:$A$10&$C$2:$C$10
也就是:
{"曹建龙40970";"高飞41630";"安云太41433";"曹建龙42962";"安志明41931";"高飞43532";"高明40511";"高明42861";"曹建龙43690"}
然后将该姓名与该姓名的最大日期连接起来,作为一个组合条件:F2&I2,也就是条件:"安云太41433"
这样,使用MATCH函数从构建的数组中,查找的 "安云太41433" 位置。
这个位置,就是指定姓名的最新证书所在的位置。
最后,使用INDEX函数从B列取出结果。
-----------------------
关于数组公式基本知识,将在下一篇文章做全面介绍。
---------------
函数公式精选文章

