在工作及生活中,
經(jīng)常會(huì)遇到這樣的需求:在一個(gè)數(shù)據(jù)列表中查找是否包含指定的若干數(shù)據(jù)項(xiàng),并根據(jù)查找結(jié)果返回另外一項(xiàng)數(shù)據(jù)。例如:我們已經(jīng)有下圖所示一張表,其中記錄了梁山108將的基本信息,文件名稱為 梁山108將名單.XLS,表名為 Sheet1,存儲(chǔ)在 D:\Test 目錄下(我們叫它表1)。
現(xiàn)在,我們又拿到了一個(gè)在征方臘等戰(zhàn)役中陣亡的梁山好漢名單(我們叫它表2),但該名單中沒有各位好漢的“綽號(hào)”,讓人感覺有點(diǎn)遺憾。如何才能方便地把表1中“綽號(hào)”信息補(bǔ)充到表2中呢?當(dāng)然你可以查一查表1敲進(jìn)去,那樣我可就只好去睡覺啦!這個(gè)方法只適合幾十個(gè)數(shù)據(jù)項(xiàng)以下,如果有成千上百就不適用啦
此時(shí),本小子特別鐘情于用VLOOKUP函數(shù),為便于演示其用法,我們先把表1中的“姓名”與“綽號(hào)”兩列數(shù)據(jù)復(fù)制到表2中放在D和E兩列(我們只要在這兩列數(shù)據(jù)中查找即可,如果需要其他信息請(qǐng)比照?qǐng)?zhí)行
)。然后在B2單元格輸入下述公式:
這里的公式 =VLOOKUP(A2,D:E,2,FALSE) 的意思是說:在D:E這兩列(暫稱之為搜索區(qū)域)中查找A2單元格中的值“鮑旭”,找到后把搜索區(qū)域中與“鮑旭”在同一行的第2列數(shù)值(即“喪門神”)返回并顯示在B2單元格中(詳細(xì)用法請(qǐng)參見本文后面的注解);如果在搜索區(qū)域中未找到指定的數(shù)值(即姓名),EXCEL會(huì)返回一個(gè)錯(cuò)誤值:#N/A。如下圖紅色所示的“晁蓋”,因?yàn)樗谓隼洗?,而晁天王無論在政治還是黑心上均斗不過江哥,不僅無端被“借刀殺”,就連個(gè)座次也沒排上,千古奇冤啊
這樣,我們就基本解決了開頭提出的問題。在數(shù)據(jù)量較大、為保持表格整齊或者數(shù)據(jù)不允許拷來拷去時(shí)怎么辦?當(dāng)然我們可以把搜索區(qū)域的信息復(fù)制到同一個(gè)工作簿中的一張新表上,但最直接的辦法還是在上述公式中引用其他工作簿中的相關(guān)區(qū)域,此例為:梁山108將名單.XLS 中表名為 Sheet1 的A:B兩列。現(xiàn)在我們把剛剛復(fù)制到表2中的D:E兩列信息刪掉,上述公式自然會(huì)由于找不到相關(guān)的搜索區(qū)域而報(bào)錯(cuò)顯示為“#REF!”,只要把公式中這個(gè)位置的信息換成表1中的A:B區(qū)域就行啦。首先要打開 梁山108將名單.XLS,然后如下圖所示選中公式中的錯(cuò)誤信息(即用鼠標(biāo)涂黑):
切換到 梁山108將名單.XLS(ALT+TAB或用鼠標(biāo)都可以),選中A:B兩列,此時(shí)公式中的錯(cuò)誤信息即被自動(dòng)替換。
鍵入回車,該公式就修改完畢,關(guān)閉 梁山108將名單.XLS,把公式復(fù)制到所有單元格,正確的公式如下圖:
在此可以看到,在EXCEL公式中引用其他工作簿的格式為:'目錄\[文件名.xls]表名'!區(qū)域,注意兩個(gè)單引號(hào)是必須的,文件名稱兩邊要用[ ]括起來。但這種格式的引用將隨著文件所在的目錄名稱長度而激增,閱讀及使用均不方便,出錯(cuò)后也不容易查找。還好,EXCEL也允許我們給這樣的區(qū)域自定義一個(gè)名稱,并且在公式中直接使用。如下圖選擇菜單“插入”-“名稱”-“定義”:
打開“定義名稱”對(duì)話框,在引用位置中輸入正確的區(qū)域表達(dá)式,在名稱中輸入一個(gè)好記的名稱,如 List ,點(diǎn)擊確定之后EXCEL就把該區(qū)域表達(dá)式記憶下來,并且給它一個(gè)名字 List ,之后想用到這個(gè)區(qū)域時(shí)只要輸入這個(gè)名稱就行啦。
如下圖所示,是分別使用區(qū)域名稱及定義名稱的方式比較,其結(jié)果完全一致。另外,對(duì)于前面我們提到過的可憐人物“晁蓋”,由于不在108將中,所以找不到其綽號(hào)而出錯(cuò)啦。為了保持表格的美觀,我們常常也需要對(duì)這種情況進(jìn)行處理,以便讓其不顯示那些看上去別扭的錯(cuò)誤信息。在此,小子給出了使用另外兩個(gè)函數(shù)ISERR及IF來解決此類問題的方法之一。
公式中的出現(xiàn)的List就是我們?cè)谏弦徊街卸x的名稱,它實(shí)際指代了那個(gè)長長的區(qū)域名稱:'D:\Test\[梁山108將名單.xls]Sheet1'!$A:$B。
注:VLOOKUP函數(shù)用法(摘抄自Microsoft Excel 幫助文檔):
在表格數(shù)組的首列查找值,并由此返回表格數(shù)組當(dāng)前行中其他列的值。VLOOKUP 中的 V 表示垂直方向。當(dāng)比較值位于需要查找的數(shù)據(jù)左邊的一列時(shí),可以使用 VLOOKUP,而不用 HLOOKUP。
=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
參數(shù)詳解:
- Lookup_value 為需要在表格數(shù)組 (數(shù)組:用于建立可生成多個(gè)結(jié)果或可對(duì)在行和列中排列的一組參數(shù)進(jìn)行運(yùn)算的單個(gè)公式。數(shù)組區(qū)域共用一個(gè)公式;數(shù)組常量是用作參數(shù)的一組常量。)第一列中查找的數(shù)值。Lookup_value 可以為數(shù)值或引用。若 lookup_value 小于 table_array 第一列中的最小值,VLOOKUP 將返回錯(cuò)誤值 #N/A。
- Table_array 為兩列或多列數(shù)據(jù)。請(qǐng)使用對(duì)區(qū)域的引用或區(qū)域名稱。table_array 第一列中的值是由 lookup_value 搜索的值。這些值可以是文本、數(shù)字或邏輯值。不區(qū)分大小寫。
- Col_index_num 為 table_array 中待返回的匹配值的列序號(hào)。Col_index_num 為 1 時(shí),返回 table_array 第一列中的數(shù)值;Col_index_num 為 2,返回 table_array 第二列中的數(shù)值,以此類推。如果 col_index_num :
小于 1,VLOOKUP 返回錯(cuò)誤值 #VALUE!。
大于 table_array 的列數(shù),VLOOKUP 返回錯(cuò)誤值 #REF!。 - Range_lookup 為邏輯值,指定希望 VLOOKUP 查找精確的匹配值還是近似匹配值:
如果為 TRUE 或省略,則返回精確匹配值或近似匹配值。也就是說,如果找不到精確匹配值,則返回小于 lookup_value 的最大數(shù)值。table_array 第一列中的值必須以升序排序;否則 VLOOKUP 可能無法返回正確的值。可以選擇“數(shù)據(jù)”菜單上的“排序”命令,再選擇“遞增”,將這些值按升序排序。有關(guān)詳細(xì)信息,請(qǐng)參閱默認(rèn)排序次序。
如果為 FALSE,VLOOKUP 將只尋找精確匹配值。在此情況下,table_array 第一列的值不需要排序。如果 table_array 第一列中有兩個(gè)或多個(gè)值與 lookup_value 匹配,則使用第一個(gè)找到的值。如果找不到精確匹配值,則返回錯(cuò)誤值 #N/A。