如下圖1所示,單元格區域A1:E12是一組數據,單元格區域B16:C20是一個標準查找表。其中,列D中的數據為對應的列C中的數據減去列A中的數據,例如D2=C2-A2;列E中的數據為:列B中的值在查找表B16:C20中查找相應的解決用時,然后與列D中的值比較,如果列D中的值小于查找到的解決用時,則輸入“Pass”,否則輸入“Fail”。如何使用公式在列E中輸入相應的值?
圖1
先不看答案,自已動手試一試。
公式
在單元格E2中,輸入數組公式:
=IF((D2)<=(TIMEVALUE(INDEX($C$17:$C$20,MATCH(B2,$B$17:$B$20,0),0))),”Pass”,”Fail”)
下拉至單元格E12。
公式解析
首先看公式中的:
MATCH(B2,$B$17:$B$20,0)
在單元格區域B17:B20中查找單元格B2中的值“SL3”出現的位置,顯示結果為:3。
傳遞給INDEX函數:
INDEX($C$17:$C$20,MATCH(B2,$B$17:$B$20,0),0))
即:
INDEX($C$17:$C$20,3,0))
獲取單元格區域C17:C20中第3行的值:08:00。
然后將該值轉換為時間序數:
TIMEVALUE(08:00)
得到:
0.333333333333333
將其與單元格D2中的值比較。在單元格D2中顯示的是“時:分”格式,但Excel實際存儲的是時間序數,因此可以正確地對兩者進行比較。結果為:True,因此最終公式的結果為:
Pass
這個公式比較簡單,關鍵是在比較前應使用TIMEVALUE函數將時間轉換為序數。我們知道,Excel是以序數的形式存儲時間的,一天的時間范圍從0至0.99999999,代表0:00:00至23:59:59。序數可以這樣換算:
小時數*60/一天的總分鐘數
例如:8:00可以換算為:
8*60/1440=0.333333333333333
上面使用了MATCH/INDEX函數組合進行查找,本例中也可使用VLOOKUP函數來查找,公式為:
=IF(D2<TIMEVALUE(VLOOKUP(B2,$B$17:$C$20,2,FALSE)),”Pass”,”Fail”)
結果相同。