要真正發(fā)揮Excel的威力,你必須掌握Excel的靈魂―函數(shù)。不會(huì)使用Excel的函數(shù),你就不是一個(gè)真正的會(huì)用Excel的用戶。正是一 個(gè)個(gè)功能各異的函數(shù),組成的不同的公式,才讓Excel這位大俠,有了絕世武功。每一個(gè)函數(shù),便是他的一招絕學(xué),但只單單學(xué)會(huì)他的招術(shù),也還是不夠,只有 把所有招術(shù)練熟了,并綜合運(yùn)用,融會(huì)貫通,做到招中有招,才能真正掌握他的絕世武功,讓Excel自動(dòng)幫我們完成無法完成的任務(wù)。
下面,我們便來開始學(xué)心Excel大俠的絕學(xué)。我會(huì)先一招一招地介紹,幾招之后,再演示怎么綜合應(yīng)用所學(xué)的幾招,創(chuàng)建新招。在實(shí)際對(duì)敵中,我們要知道,招是死的,人是活的,招由心生,綿綿不絕。
第一招:大海撈針(Vlookup函數(shù))
招如其名。此招用來在一個(gè)茫茫的數(shù)據(jù)源中,自動(dòng)讓電腦找出你要的某個(gè)數(shù)據(jù)的相關(guān)資料并填在指定的地方。也是就是,可以讓電腦在一個(gè)表格或指定的 一個(gè)區(qū)域中查找某一指定的值,并由此返回該值相對(duì)應(yīng)當(dāng)前行中指定列處的數(shù)值。此招還有相應(yīng)的變化,分別為lookup和Hlookup兩式。當(dāng)查找的數(shù)據(jù) 是水平排列時(shí),可以使用函數(shù) HLOOKUP 代替函數(shù) VLOOKUP。但用到的情況比較少,這里不做介紹。
例如:你有一個(gè)工作表,上面近萬項(xiàng)貨品名稱,每項(xiàng)貨品的代碼,價(jià)格,購買日期等。如你要做另一份報(bào)表,且其中部分貨品在這份表中己有數(shù)據(jù),則可以利用此招,只輸入貨品的名稱或者代碼,其余的讓電腦自動(dòng)查找并返回相應(yīng)的價(jià)格,購買日期等。
使用語法
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
Lookup_value 為需要查找的值。Lookup_value 可以為數(shù)值、引用或文本字符串。
Table_array 為需要在其中查找數(shù)據(jù)的數(shù)據(jù)表。可以使用對(duì)區(qū)域或區(qū)域名稱的引用,例如數(shù)據(jù)庫或列表。
如果 range_lookup 為 TRUE,則 table_array 的第一列中的數(shù)值必須按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;否則,函數(shù) VLOOKUP 不能返回正確的數(shù)值。如果 range_lookup 為 FALSE,table_array 不必進(jìn)行排序。
通過在“數(shù)據(jù)”菜單中的“排序”中選擇“升序”,可將數(shù)值按升序排列。
Table_array 的第一列中的數(shù)值可以為文本、數(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,函數(shù) VLOOKUP 返回錯(cuò)誤值值 #VALUE!;如果 col_index_num 大于 table_array 的列數(shù),函數(shù) VLOOKUP 返回錯(cuò)誤值 #REF!。
Range_lookup 為一邏輯值,指明函數(shù) VLOOKUP 返回時(shí)是精確匹配還是近似匹配。如果為 TRUE 或省略,則返回近似匹配值,也就是說,如果找不到精確匹配值,則返回小于 lookup_value 的最大數(shù)值;如果 range_value 為 FALSE,函數(shù) VLOOKUP 將返回精確匹配值。如果找不到,則返回錯(cuò)誤值 #N/A。
說明
如果函數(shù) VLOOKUP 找不到 lookup_value,且 range_lookup 為 TRUE,則使用小于等于 lookup_value 的最大值。
如果 lookup_value 小于 table_array 第一列中的最小數(shù)值,函數(shù) VLOOKUP 返回錯(cuò)誤值 #N/A。
如果函數(shù) VLOOKUP 找不到 lookup_value 且 range_lookup 為 FALSE,函數(shù) VLOOKUP 返回錯(cuò)誤值 #N/A。
應(yīng)用示例:
上圖中,為方便比較,我將原始數(shù)據(jù)區(qū)域放在了同一工作表中(E1:F5),實(shí)際使用時(shí),原始數(shù)據(jù)可以在不同的工作表,甚至不同的工作簿(即不同 的Excel文件)。當(dāng)被查找的內(nèi)容與原始內(nèi)容在不同的工作表,table_array前面需加上工作表的名稱,寫法為 “表名! ”區(qū)域范圍,如“Sheet2!$A$1:$B$12”,而若在不同的工作簿,則還得加上文件名,如“[文件名]sheet1!$A$1:$B$12”。
詳細(xì)解釋
公式“=Vlookup(A2,$E$2:$F$5,2,FALSE)”中A2表示要查找的值為A2單元格的內(nèi)容,即“Apple”, “$E$2:$F$5”告訴電腦,應(yīng)該去$E$2:$F$5這個(gè)數(shù)據(jù)區(qū)域中查找,“2”表示找到后,應(yīng)傳回該區(qū)域第二列的值,即數(shù)量列,最后 “FALSE”參數(shù)系統(tǒng),查找區(qū)域內(nèi)容未進(jìn)行排序,需使用精確查找,找不到就算了,不返回近似匹配值。
特別要注意的是,通常我們都是使用鼠標(biāo)拖動(dòng)的方法來填充公式,而拖動(dòng)時(shí),Excel對(duì)公式中區(qū)域的引用,處理方法是不一樣的。如果是相對(duì)參照, 即欄名列號(hào)前沒有“$”符號(hào),則Excel會(huì)對(duì)該區(qū)域作相對(duì)位移,如上欄是E2:B5,拖到下欄后,即會(huì)自動(dòng)成為E3:B6,這種處理方法在很多公式中是 必要的,但在這個(gè)公式中卻是致命的,因?yàn)樗牧瞬檎业脑紨?shù)據(jù)的區(qū)域,導(dǎo)致實(shí)際上包含有的數(shù)據(jù),因己不在查找的區(qū)域中而漏網(wǎng)。這也是很多用戶在實(shí)際應(yīng)用 中犯的錯(cuò)誤,引致查找結(jié)果不真實(shí)。要解決這個(gè)問題,我們可以利用Excel對(duì)區(qū)域引用的第二種方法:絕對(duì)參照。即在欄名列號(hào)前加上“$”,這樣,系統(tǒng)就不 會(huì)作相對(duì)的位移,無論怎樣拖,區(qū)域范圍都不變。(在很多情況下,我們會(huì)使用“名稱”來代替直接的區(qū)域指定方式,使用更為方便。這一內(nèi)容將在其他章節(jié)中介 紹)
相對(duì)參照與絕對(duì)參照的寫法,可以讓電腦作自動(dòng)轉(zhuǎn)換。方法是,先將當(dāng)前單元格定位在要修改的單元格上,然后在資料編輯列,用鼠標(biāo)涂黑(英文的說法叫Highlight)要轉(zhuǎn)換的部分,再按“F4”即可。見下圖:
通過上圖可以看出,能找到的,系統(tǒng)己自動(dòng)填入了找到的值,如Apple & cherry,對(duì)于找不到的(Plum & Pear),則顯示#N/A。
第二招:左右逢源(If函數(shù))
此招用來對(duì)某一條件執(zhí)行的真假值進(jìn)行判斷,根據(jù)邏輯計(jì)算的真假值,返回不同結(jié)果。如果結(jié)果為真,則返回一個(gè)真,如果為假,則返回另一值,可謂左右逢源。
使用語法
IF(logical_test,value_if_true,value_if_false)
Logical_test 表示計(jì)算結(jié)果為 TRUE 或 FALSE 的任意值或表達(dá)式。例如,A1>=60 就是一個(gè)邏輯表達(dá)式,如果單元格 A1 中的值大于或等于 60,表達(dá)式即為 TRUE,否則為 FALSE。本參數(shù)可使用任何比較運(yùn)算符。
Value_if_true logical_test 為 TRUE 時(shí)返回的值。例如,如果本參數(shù)為文本字符串“預(yù)算內(nèi)”而且 logical_test 參數(shù)值為 TRUE,則 IF 函數(shù)將顯示文本“預(yù)算內(nèi)”。如果 logical_test 為 TRUE 而 value_if_true 為空,則本參數(shù)返回 0(零)。如果要顯示 TRUE,則請(qǐng)為本參數(shù)使用邏輯值 TRUE。Value_if_true 也可以是其他公式。
Value_if_false logical_test 為 FALSE 時(shí)返回的值。例如,如果本參數(shù)為文本字符串“超出預(yù)算”而且 logical_test 參數(shù)值為 FALSE,則 IF 函數(shù)將顯示文本“超出預(yù)算”。如果 logical_test 為 FALSE 且忽略了 Value_if_false(即 value_if_true 后沒有逗號(hào)),則會(huì)返回邏輯值 FALSE。如果 logical_test 為 FALSE 且 Value_if_false 為空(即 value_if_true 后有逗號(hào),并緊跟著右括號(hào)),則本參數(shù)返回 0(零)。Value_if_false 也可以是其他公式。
說明
函數(shù) IF 最多可以嵌套七層,用 value_if_false 及 value_if_true 參數(shù)可以構(gòu)造復(fù)雜的檢測條件。
在計(jì)算參數(shù) value_if_true 和 value_if_false 后,函數(shù) IF 返回相應(yīng)語句執(zhí)行后的返回值。
應(yīng)用示例:
第三招:投石問路(IS函數(shù))
此招用來對(duì)某個(gè)單元格的當(dāng)前值的類型進(jìn)行判斷,以便知道其類型后,再采取下一部行動(dòng),因此稱為投石問路。
IS函數(shù)共有九個(gè)工作表函數(shù)。概括為 IS 類函數(shù),可以檢驗(yàn)數(shù)值的類型并根據(jù)參數(shù)取值返回 TRUE 或 FALSE。例如,如果數(shù)值為對(duì)空白單元格的引用,函數(shù) ISBLANK 返回邏輯值 TRUE,否則返回 FALSE。
使用語法
ISBLANK(value)
ISERR(value)
ISERROR(value)
ISLOGICAL(value)
ISNA(value)
ISNONTEXT(value)
ISNUMBER(value)
ISREF(value)
ISTEXT(value)
Value 為需要進(jìn)行檢驗(yàn)的數(shù)值。分別為:空白(空白單元格)、錯(cuò)誤值、邏輯值、文本、數(shù)字、引用值或?qū)τ谝陨先我鈪?shù)的名稱引用。
應(yīng)用示例:
詳細(xì)解釋
公式“=ISBLANK(A1)”,表示對(duì)A1單元格是否為空進(jìn)行判斷。如是是空的,則返回“True”值,如果不為空,則返回 “False)的值。
上面示例圖中,B1及B2單元格中的函數(shù)分別對(duì)A1及A2單元格進(jìn)行是否為空白的判斷。結(jié)果顯示一個(gè)為真,一個(gè)為假。
OK,我們己經(jīng)學(xué)了三招,現(xiàn)在我們要將這三招組合起來,自創(chuàng)一招新招。
第四招:瞞天過海(自創(chuàng)組合招數(shù))
我們來看學(xué)第一招時(shí)用的例子,
對(duì)于找不到的項(xiàng)目,系統(tǒng)顯示#N/A,但這樣的報(bào)告交給上司,未免太難看了些。用什么方法,可以讓其不顯示出錯(cuò)誤值呢?對(duì)了,先來一招投石問 路,對(duì)系統(tǒng)返回的值做一個(gè)判斷,看看系統(tǒng)到底找到?jīng)]有。再來一招左右逢源,對(duì)于找到的就顯示原值,找不到的,就干脆讓它顯示空白(當(dāng)然,也可讓設(shè)置其他的 值如No等),豈不妙哉?
因此,對(duì)于原單一公式:=VLOOKUP(A2,$E$2:$F$5,2,FALSE),可以結(jié)合IF和IS函數(shù)來使用。大家剛才看到,對(duì)于投 石問路,共有九種變化,其中第三式(ISERROR)或第五式(ISNA)均適合這種情況,可以使用。因此,組合后的公式就變成:
=IF(ISNA(VLOOKUP(D2,$G$2:$H$5,2,FALSE)),"",VLOOKUP(D2,$G$2:$H$5,2,FALSE))
或
=IF(ISERROR(VLOOKUP(D3,$G$2:$H$5,2,FALSE)),"",VLOOKUP(D3,$G$2:$H$5,2,FALSE))
下圖顯示了這種情況。紅框中用的就是組合的公式,而其中的Plum & Pear沒有再顯示難看的#N/A,報(bào)表因此漂亮多了。
因?yàn)槭枪,只要寫好第一個(gè)單元格的公式,其余的一拖就好了。