邏輯判斷可以算是函數(shù)與公式的基本功了,但是不同的人寫出來的公式,卻也差別甚大,有冗長繁雜的“累贅”,有中規(guī)中矩的“易懂”,有天馬行空的“精妙”。下面舉些例子。
1、冗長繁雜型:
?。?)多余的判斷,比如:ISNUMBER、ISERROR、ISNA等信息函數(shù)本身返回的就是邏輯值,一些習(xí)慣編程的人,經(jīng)常會寫出=IF(ISNUMBER(……)=TRUE,……后面這個=TRUE是沒有必要的;
(2)多余的嵌套,比如:“如果A1小于10,返回1,如果A1大于等于10且小于20,返回2,如果A1大于等于20,返回3?!焙芏喑鯇W(xué)者見到“且”就想到AND,沒有分析嵌套函數(shù)本身包含的邏輯關(guān)系,用 =IF(A1<10,1,IF(AND(A1>=10,A1<20),2,IF(A1>20,3)))
實(shí)際上IF(條件,條件為真時返回的結(jié)果,條件為假時返回的結(jié)果),上面公式本身第2個IF就是在第1個IF的條件為假的情況下發(fā)生的,也就是本身就包含了A1>=10,因此AND是沒有必要的,同理,第3個IF也是沒有必要的,只需:=IF(A1<10,1,IF(A1<20,2,3))
2、中規(guī)中矩型(入門推薦)與思路跳躍型(進(jìn)階專研)
學(xué)習(xí)函數(shù)要干什么?記得有人說“有必要鉆那么深么?”對,目的決定應(yīng)該選擇的方法。相信多數(shù)人學(xué)習(xí)Excel是要“用”而不是要“炫”的。如果自己寫一個公式,自己都看不懂,那又怎么“用好”它呢?
Excel的函數(shù)與公式,是很接近“自然語言”的,因此,寫好一個公式,實(shí)際上相當(dāng)于“說好一句話”。
【舉例】
在計算以B1為分母的公式,比如=A1/B1,為了避免B1未輸入數(shù)據(jù)會被當(dāng)做0或者B1輸入0產(chǎn)生#DIV/0!錯誤,我們就會這么說“當(dāng)B1不為0時,才進(jìn)行A1/B1計算,否則不顯示”
那么寫出的公式就是:=IF(B1<>0,A1/B1,)
簡單易懂。如果要規(guī)定A1未輸入數(shù)據(jù)或輸入0的時候,也不顯示,那么寫出的公式就是:=IF(AND(A1<>0,B1<>0),A1/B1,)
這兩個都是中規(guī)中矩的按照常規(guī)寫法來做。下面從思路的跳躍方面進(jìn)行分析:
利用邏輯值與數(shù)值關(guān)系的互換技巧
【前提】既然是A1/B1的計算,當(dāng)然不會想在A1輸入“中國”、B1輸入“日本”這樣的數(shù)據(jù),而是輸入數(shù)值。
【技巧】既然是數(shù)值,在邏輯判斷中,就可以利用邏輯值與數(shù)值的轉(zhuǎn)換關(guān)系來解題。
【解題】
1、=IF(B1,A1/B1,)——利用B1是數(shù)值,當(dāng)B1是空單元格或0時,0等價于FALSE。
2、=IF(A1*B1,A1/B1,)——這哪兒跟哪兒啊,要除的怎么冒了個乘的?
解釋1:如果A1或B1中有一個0,A1*B1都會等于0而被視為FALSE;
解釋2:還是數(shù)值與邏輯值的關(guān)系,把A1看成一個條件,邏輯判斷中那么A1<>0可以直接用A1代替,也就是AND(A1<>0,B1<>0)可以直接用AND(A1,B1);或者看成單值計算中的條件相乘(A1<>0)*(B1<>0)
對于解釋1、解釋2,很明顯解釋1我們?nèi)菀桌斫?,解?似乎枯燥了些,沒關(guān)系,它實(shí)際上是一個可以拓展的思路,包括數(shù)組公式中的條件相乘,不正是我們漢語理解里面“條件1成立且條件2成立且……條件n成立”嗎。
下面的例子說的是邏輯位置的變換:
【舉例1】還是公式=IF(B1<>0,A1/B1,),我們看看變身:=IF(B1=0,,A1/B1)省略了1個字符,呵呵。
【舉例2】公式=IF(A1>=20,3,IF(A2>=10,2,1)),變身:=IF(A1<10,1,IF(A2<20,2,3))省略了2個字符,呵呵。
這是兩個很簡單的例子,從運(yùn)算量的角度來說,并沒有多大的區(qū)別,但邏輯條件稍稍一改,公式就短了。這邏輯條件還不是我們設(shè)的嘛,先說A再說B,還是先說B再說A,如果結(jié)果沒啥兩樣,而又有簡單方法,那么避繁就簡。別看這小小省略字符,好像非參加競賽弄個最短公式不可,事實(shí)上這些解題對人的思維方式鍛煉也是很有用的,關(guān)鍵時刻,還可以解決困難,比如減少1層嵌套,見:
【舉例3】學(xué)了數(shù)組公式的朋友都很經(jīng)常看到類似=SMALL(IF(A$1:A$100=張三,ROW($1:$100),65536),ROW(1:1))的公式,有時候在復(fù)雜的數(shù)組公式中,往往要用到ROW(INDIRECT())等多層嵌套,使用Excel2003的朋友,總在擔(dān)心7層嵌套限制問題。首先我們分析一下這個公式,意思是滿足條件是返回對應(yīng)行號、否則返回一個大的數(shù)字(常用65536來返回那一行的空白單元格,實(shí)際上多數(shù)人表格根本用不到1萬行),那么只要返回的“大數(shù)”在范圍內(nèi),也無所謂65536,主要問題是要ROW($1:$100)怎么弄出來。
變身1:
=SMALL(IF(A$1:A$100<>張三,65536,ROW($1:$100)),ROW(1:1))
——咦?舉例1不是剛剛費(fèi)勁要變短的嘛?
變身2:
=SMALL((A$1:A$100<>張三)*60000+ROW($1:$100),ROW(1:1))
——哈哈,原來變身1是醉翁之意不在酒啊。
看一下,少了個IF函數(shù),少了1層嵌套,耶!