01
使用 INDEX 和 MATCH 或 OFFSET 而不是 VLOOKUP
雖然 VLOOKUP 比 MATCH 和 INDEX仿滔,或 OFFSET 組合的速度稍快(大約快 5%)杨幼、更簡單嫌拣,并使用更少的內(nèi)存,但 MATCH 和 INDEX 所提供的額外靈活性通尺蠛恚可以顯著節(jié)省時間捣卤。例如,可以將完全 MATCH 的結(jié)果存儲在單元格中八孝,并在幾個 INDEX 語句中重用董朝。INDEX 函數(shù)是快速運行的不變函數(shù),它可以加快重新計算的速度干跛。 OFFSET 函數(shù)的運行速度也很快子姜;但它是可變函數(shù),因此有時會顯著增加處理計算鏈所需的時間楼入「绮叮可輕松將 VLOOKUP 轉(zhuǎn)換為 INDEX 和 MATCH。以下兩個語句返回相同結(jié)果:
VLOOKUP(A1,?Data!$A$2:$F$1000,3,False)INDEX(Data!$A$2:$F$1000,MATCH(A1,$A$1:$A$1000,0),3)
02
SORT的應用
由于完全匹配查找可能很慢嘉熊,因此可以考慮使用以下選項來提高性能:
使用一個工作表遥赚。使查找和數(shù)據(jù)位于同一工作表中運行速度更快。
如果可以记舆,先對數(shù)據(jù)執(zhí)行 SORT(SORT 較快),然后使用近似匹配呼巴。
當必須使用完全匹配查找時泽腮,請將要掃描的單元格范圍限制到最小區(qū)域。使用表和結(jié)構(gòu)化引用或動態(tài)區(qū)域名稱衣赶,而不是引用大量的行或列诊赊。有時可以預先計算查找的范圍下限和范圍上限。
03
對缺少值的排序數(shù)據(jù)使用兩個查找
對于在數(shù)行內(nèi)執(zhí)行的查找府瞄,兩個近似匹配顯著快于一個完全匹配碧磅。 (分界點是大約 10-20 行。)
如果可以對數(shù)據(jù)排序遵馆,但由于不能確定要查找的值是否位于查找范圍內(nèi)而仍無法使用近似匹配鲸郊,則可以使用以下公式:
IF(VLOOKUP(lookup_val?,lookup_array,1,True)=lookup_val,?VLOOKUP(lookup_val,?lookup_array,?column,?True),?"notexist")
公式第一部分的運作方式是對查找列本身執(zhí)行近似查找
VLOOKUP(lookup_val?,lookup_array,1,True)
可以使用以下公式檢查從查找列得到的結(jié)果是否與查找值相同(在這種情況下,你有一個完全匹配項):
IF(VLOOKUP(lookup_val?,lookup_array,1,True)=lookup_val,
如果此公式返回“True”货邓,則找到了完全匹配項秆撮,所以可以再次執(zhí)行近似查找,但這次從列中返回所需的結(jié)果换况。
VLOOKUP(lookup_val,?lookup_array,?column,?True)
如果從查找列得到的結(jié)果與查找值不匹配职辨,則表示它是缺失值盗蟆,公式將返回“notexist”。
注意舒裤,如果查找的值小于列表中的最小值喳资,則會收到錯誤√诠可以使用 IFERROR 來處理此錯誤仆邓,或者向列表添加一個小的測試值。
04
對于缺少值的未排序數(shù)據(jù)台腥,使用 IFERROR 函數(shù)
如果必須對未排序數(shù)據(jù)使用完全匹配查找宏赘,但是不能確定查找值是否存在,通常必須處理找不到匹配項時返回的 #N/A黎侈。從 Excel 2007 開始察署,可以使用 IFERROR 函數(shù),該函數(shù)既快又簡單峻汉。
IF?IFERROR(VLOOKUP(lookupval,?table,?2?FALSE),0)
在早期版本中贴汪,一個簡單但較慢的方法是使用包含兩個查找的 IF 函數(shù)。
IF(ISNA(VLOOKUP(lookupval,table,2,FALSE)),0,VLOOKUP(lookupval,table,2,FALSE))
如果使用完全 MATCH 一次休吠,將結(jié)果存儲在單元格中扳埂,然后在執(zhí)行 INDEX 之前測試結(jié)果,則可以避免雙重完全查找瘤礁。
In?A1?=MATCH(lookupvalue,lookuparray,0)In?B1?=IF(ISNA(A1),0,INDEX(tablearray,A1,column))
如果無法使用兩個單元格阳懂,則使用 COUNTIF。它通常比完全匹配查找速度快柜思。
??IF?(COUNTIF(lookuparray,lookupvalue)=0,?0,?VLOOKUP(lookupval,?table,?2?FALSE))
05
使用 MATCH 和 INDEX 對多個列進行完全匹配查找
通逞业鳎可以多次重復使用存儲的完全 MATCH。例如赡盘,如果要對多個結(jié)果列執(zhí)行完全查找号枕,則可以使用一個 MATCH 和多個 INDEX 語句(而不是多個 VLOOKUP 語句)來節(jié)省時間。為 MATCH 添加一個額外的列來存儲結(jié)果 (stored_row)陨享,并對每個結(jié)果列使用以下語句:
INDEX(Lookup_Range,stored_row,column_number)
或者葱淳,可以在數(shù)組公式中使用 VLOOKUP。(必須使用 Ctrl+-Shift+Enter 輸入數(shù)組公式抛姑。Excel 將添加 { and }赞厕,以顯示這是一個數(shù)組公式)。
{VLOOKUP(lookupvalue,{4,2},FALSE)}