問題描述:值班組長在安排部門人員值班的時候,需要查看每個人員最近一次的值班日期,避免重複安排。例如下圖中,黃思思最近一次值班時間是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單元格區域獲取對應的值。
以上公式中有哪裡不懂的地方可以在評論區留言找我哦~
覺得文章不錯,請轉發和點贊,您的不斷支持與鼓勵是小編寫出更多優質教程的動力!