16.VLOOKUP+MATCH用于完全動態的列索引
將上面介紹的技巧更進一步,可以使用MATCH來查找表中列的位置,返回完全動態的列索引號。
有時這被稱作雙向查找,因為正沿著行和列的方向查找。
一個示例是查找銷售人員在指定月份的銷售量,或者查找從指定的供應商特定產品的價格。例如,假設有銷售人員每月的銷售量:
圖27
最后的VLOOKUP公式將輔助列作為查找列來查找名字和姓氏連在一起的值:
=VLOOKUP(C3&D3,name,4,0)
22.兩個VLOOKUPS比一個VLOOKUP更快
這可能看起來很瘋狂,但是當你有大量數據并需要執行完全匹配時,可以通過在公式中添加另一個VLOOKUP來加快VLOOKUP的速度!
背景:假設你有大量的訂單數據,例如超過了10000條記錄,并且正在使用VLOOKUP來基于訂單ID查找訂單總數。因此,使用的公式形式如下:
=VLOOKUP(order_id,order_data,5,FALSE)
公式最后的FALSE迫使VLOOKUP執行完全匹配。你需要完全匹配,因為有可能找不到訂單號。此時,完全匹配設置將導致VLOOKUP返回#N/A錯誤。
問題是完全匹配非常慢,因為Excel必須以線性方式遍歷所有值,直至找到匹配或者不匹配。
相反,近似匹配相當快,因為Excel能夠執行所謂的二分查找。
然而,二分查找的問題(VLOOKUP處于近似匹配模式)是當找不到值時,VLOOKUP可能返回錯誤的結果。更糟糕的是,結果可能看起來完全正常,因此很難發現錯誤。
解決方案是在近似匹配模式下使用VLOOKUP兩次。第1個實例簡單地檢查該值是否真的存在。如果存在,另一個VLOOKUP運行(同樣,在近似匹配模式)來獲取想要的數據。如果不是,可以返回你想要的任意值來指示沒有找到結果。
最后的公式形式如下:
=IF(VLOOKUP(order_id,order_data,1,TRUE)=order_id,VLOOKUP(order_id,order_data,5,FALSE),”Missing”)
注意,使用這個技巧時,數據必須已排序。這只是一種防止查找值丟失的方法,同時保持快速查找。
23.INDEX和MATCH組合能夠做VLOOKUP能夠做的任何事情,甚至更多
INDEX和MATCH組合與VLOOKUP孰優孰劣,在網上有許多爭論。
INDEX+MATCH可以完成VLOOKUP(和HLOOKUP)所能做的所有事情,并且更靈活,但也更復雜。因此,支持INDEX+MATCH的人會說,最好先學習INDEX和MATCH,因為最終會提供給你一個更好的工具集。
反對INDEX+MATCH的觀點是需要兩個函數,因此對用戶來說,學習和精通更復雜。
如果經常使用Excel,需要學習如何使用INDEX和MATCH,這是一個非常強大的組合。
但也應該學習VLOOKUP,因為經常會在很多工作表中發現VLOOKUP的使用。在直觀的情形下,VLOOKUP可以毫不費力地實現目的。