还在纠结要不要升级 365 版本的同学可以通过今天的案例来衡量,如果没有 365 函数,可以做到但显然麻烦得多。
案例:从下图 1 中左侧数据表的“实际完成”列中查找出小于 15 的最大值,效果如下图 2 所示。
解决方案 1:在 E2 单元格内输入以下公式:
=MAXIFS(C2:C13,C2:C13,"<"&15)
公式释义:
maxifs 函数的作用是按条件返回最大值;
语法为 MAXIFS(取值区域, 条件区域1, 条件1, [条件区域2, 条件2], ...);
MAXIFS(C2:C13,C2:C13,"<"&15):在 C2:C13 中找出符合以下条件的最大值:C2:C13 区域中 <15 的所有单元格
解决方案 2:公式如下:
=INDEX(C2:C13,XMATCH(15,C2:C13,-1))
公式释义:
index+match 的组合形式我们并不陌生,index 用于“在哪里找”,match 规定“找出第几个位置”;
在上述组合中,match 函数通常会精确查找;而本案例需要用到近似查找,如果要实现,就必须让数据升序或降序排列,否则会返回错误值,正因为如此,我在公式中将 match 换成了 xmatch;
XMATCH 函数的作用是返回项目在数组或单元格区域中的相对位置;
语法为 XMATCH(要查找的值, 查找的区域, [匹配模式], [搜索模式]);
匹配模式:
0 - 完全匹配(默认值)
-1 - 完全匹配或小于等于查找值的最大值
1 - 完全匹配或大于等于查找值的最小值
2 - 通配符匹配,其中 *, ? 和 ~ 有特殊含义
搜索模式:
1 - 搜索从第一到最后一个(默认值)
-1 - 搜索从最后到第一个(反向搜索)
2 - 执行依赖于 lookup_array 按升序排序的二进制搜索。如果未排序,将返回无效结果。
-2 - 执行依赖于 lookup_array 按降序排序的二进制搜索。如果未排序,将返回无效结果。
XMATCH(15,C2:C13,-1):在区域 C2:C13 中查找 15 或小于 15 的最大值,返回其在序列内的位置;
INDEX(C2:C13,...):返回区域 C2:C13 中处于上述位置的值