问题描述:值班组长在安排部门人员值班的时候,需要查看每个人员最近一次的值班日期,避免重复安排。例如下图中,黄思思最近一次值班时间是19年10月12号,因此在排版的时候就不会排在13号,现在我想选择每一个员工,都可以看到他最近的值班时间,如何用函数实现呢?
方法一:使用LOOKUP函数。
具体操作步骤如下:
1、选中E2单元格 -- 在编辑栏中输入公式“=LOOKUP(1,0/($A$2:$A$13=$D$2),$B$2:$B$13)” -- 按回车键回车。
2、动图演示如下。
3、公式解析。
上述公式中,先判断A2:A13单元格的值是否跟D2单元格的值相等,如果相等,返回TRUE,否则,返回FALSE。此时得到一个TRUE和FALSE组成的数组{FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE}。用0除以这个数组,得到由0和错误值#DIV/0!组成的数组{#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0},此时由于在这个数组中找不到1,所以LOOKUP函数会查找最后一个比1小的最大值,也就是0,忽略错误值,所以找到了数组中最后一个0,返回B2:B13单元格区域对应的值。
方法二:使用INDEX+SUMPRODUCT+MAX+ROW函数。
具体操作步骤如下:
1、选中E2单元格 -- 在编辑栏中输入公式“=INDEX($B$2:$B$13,MAX(ROW($A$2:$A$13)*($A$2:$A$13=$D$2))-1)” -- 按“Ctrl+Shift+Enter”回车。
2、动图演示如下。
3、公式解析。
上述公式中,先判断A2:A13单元格的值是否跟D2单元格的值相等,如果相等,返回TRUE,否则,返回FALSE。此时得到一个TRUE和FALSE组成的数组{FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE}。该数组与ROW函数得到的行号数组{2;3;4;5;6;7;8;9;10;11;12;13}相乘,得到一个由行号和0组成的数组{0;3;0;0;6;0;0;0;0;0;0;13},然后用MAX函数取这个数组中的最大值,减去1是因为我们要查找的值在B2:B13单元格区域中是从第2行开始的,我们需要知道查找的值在B2:B13单元格区域所在的位置,所以要减去1,最后用INDEX函数从B2:B13单元格区域获取对应的值。