大家好,我還是那個愛聊Excel的廖晨,前些天,在編寫IF函數的教案時,覺得其中有些可以代替IF函數的用法,還是挺有意思的,就在這裡整理一下,分享給大家。不過在講其它的用法之前,還是得從IF函數的基礎用法說起。
01IF函數基礎用法
說起IF函數語法結構,並不複雜,共3個參數,1條件,2個結果:真結果和假結果,用類公式來表示語法結構如下;
=IF(條件,[真結果],[假結果])
條件:有的書中叫條件表達式,通常由比較運算符=,>,>=,<,<=,<>組成,也可以用邏輯函數:ADN,OR,來處理多條件判斷情況;不過這裡需要注意:條件表達式的=,是表示是否等於的意思,而非賦值;
如果想玩轉條件,還有一條規則需要知道,就是不同類型的數據大小順序:數值<文本<FALSE<TRUE。
真/假結果:[]表示選填項,若無相關的處理,都可以省略,條件成立返回真結果,不成立返回假結果;真/假結果從數據類型可以分為數值,文本,邏輯值,當為文本時,需要用「包裹;
IF函數實質上,就是一道最少為2個選項的單選題。
估計有的人會說:不對啊,我如兩個結果都不寫參數或只寫一個參數,怎麼會是2個選項呢?確實,哪我們就思考一下這兩種情況:
如果兩個結果都不寫的話,哪你寫的公式就沒有存在的意義了,沒有意義事情,討論無意義;如果只寫一個結果的時候,這樣默認對應的另一個結果就是空,如果你把真結果也寫為空,哪還是無意義。說了這麼多,也只能停留在邏輯層面,接下來還是用個例子來更全面的詮釋一下IF函數的用法吧。
02條件格式替換
現有一班成績表,數學成績單,要求你區分出不及格的人?表格結構如下:
常見的做法就是及格和不及格來區分,上面的問題可用一句話概括:
數學成績大於等於60為及格,小於60則為不及格;可以從中剝離出2個條件:>=60或<60,選擇其中任何一個條件,用在IF函數中,都能解決問題,只是在函數中的真/假結果順序上有所不同,回看例子,數學成績在D列,第1個成績引用位置D2,可在E2使用的IF公式有2:
IF(D2>=60,」及格」,」不及格」)IF(D2<60,」不及格」,」及格」)我選擇了第1個公式,具體操作如下:
1.E1錄入:考試結果,E2錄入公式=IF(D2>=60,"及格","不及格"),回車;
2.滑鼠移至E2右下角,滑鼠變為實心加號,按住滑鼠左鍵,拖拽填充公式至E16或雙擊滑鼠左鍵填充公式;
但是,這種做法區分效果並不明顯,而在表現上,鮮豔的顏色和形狀明顯優於文字,說到顏色,在表格中屬於樣式的範疇,而能達到根據不同的條件,呈現不同顏色的就數-條件格式。
若用條件格式,上面剝離的2個條件中<60更適合,我用的填充紅色背景,字體顏色為白色標示:不及格,不過,若將D列都設置上條件格式,還需要滿足非空的條件,要不空白的單元格也會出現設置的格式,會顯得很LOW。
同時滿足兩個條件,我並沒有使用AND函數,而是用了另一種極簡的寫法。至於怎麼寫的,還是先看操作步驟吧!
選中D列,點擊【開始】下的【條件格式】按鈕,選擇【新建規則(N)】,彈出窗口;選擇」使用公式確定要設置格式的單元格」,條件錄入=(D1<60)*(D1<>」」),設置填充顏色為紅色,字體顏色為白色,確定。
雖然條件格式對比效果明顯,但也不能多用,因為顏色多了之後,容易讓人眼花繚亂。如果你想了解條件格式的更多用法,可翻開之前的文章《小白講Excel:你的『條件格式』什麼功法?高階?這是初階了解一下》
可能有人要問了:多條件全部成立為什麼可以用數學表達式來寫呢?那是什麼原理呢?
這類寫法不光可以替代AND和OR函數的多條件判斷,在一些場景中,還可以替代IF函數,為了方便介紹,我給這類方法起了名字:數學運算法,至於原理嗎?且聽我娓娓道來。
03數學運算法:
用數學運算法之所以能這麼用,是因為Excel的特殊設定,邏輯值和數字可以互相轉化,轉化規則如下:
數值轉化為邏輯值:0相當於FALSE,而非0相當於TRUE,當邏輯值轉化成數值:FALSE為0,TRUE為1;以上的規則,再結合數學運算法則就是該類用法的核心原理。
簡單總結為加法可替代OR函數,乘法可代替AND函數,當IF函數的真假結果也是數值時,就可以用該法代替了。理論有點空,還是來個例子,近距離了解一下其中奧義吧。
這個例子比較簡單,就是根據錄入的快遞重量,計算出相應的運費?
要編寫計算公式,首先必須了解快遞續重的規則:
只要超過1KG,不論多少,都是按2KG計算;所以當重量超過1KG,需要對數值進行向上取整,這時需要用到函數ROUNDUP:
語法結構 ROUNDUP(取整數值,保留小數)用法:當保留小數為0時,只保留整數;回看源數據,運費的計算分3種情況:
以送達廣東為例:
<=0.5KG 運費為B2:7.8;>0.5且<=1KG,運費為C2:9.00>1KG,運費為:(C2)9.0+(快遞重量-1)*0.8(D2)理清這些關係,就可以編寫運費的計算公式了,不過別忘記在>=1KG時,需要對快遞的重量向上取整,還有整張表都在使用一個快遞重量引用:G2,所以在寫公式時,需要使用絕對引用,於是將上面的內容匯總成IF公式:
=IF($G$2<=0.5,B2,IF($G$2<=1,C2,C2+(ROUNDUP($G$2,0)-1)*D2))但是如果你仔細觀察數據,你就會發現,當>0.5KG的向上取整,帶入>1KG的公式中,也是C2,所以公式可以簡寫為:
=IF($G$2<=0.5,B2,C2+(ROUNDUP($G$2,0)-1)*D2)那麼問題來了,該如何用數學運算法代替呢?
根據TRUE和FALSE可以轉化為1和0,上面公式的條件可以抽離成($G$2<=0.5)和($G$2>0.5);然後與IF中的結果相乘,再求和即可:
=($G$2<=0.5)*B2+($G$2>0.5)*((ROUNDUP($G$2,0)-1)*D2+C2)具體操作步驟如圖:
這個數學運算法之所以能得出正確的結果,是因為數學運算法則中的乘法法則:
0任何數都為0;當條件不成立時,轉化的成數值為0,而0*任何數都是0,就會過濾掉後面的結果,當條件成立,則轉化為1,就會保留表達式後面的結果。
可能你要說:這也就能代替一個IF函數,如果遇到嵌套的,這種寫法比IF函數還要難辨邏輯吧?
確實,它只適合代替單一的IF函數,因為每個判斷結果都需要有判斷條件,想比IF函數會多一些代碼,但是它在代替AND和OR函數上,還是有優勢的,而且你用於驗證複雜公式中的IF函數的運行結果也是很不錯的,至於如何代替IF嵌套呢?還得函數替換法。
04函數替換法
第1個例子之所沒有用到IF嵌套是因為分級少,哪我們就按中考的成績劃分法,將一科成績劃分為5個等級:
A:>=90且<=100;B:>=80且<90;C:>=70且<80;D:>=60且<70;E:<60如果用IF函數的嵌套來做,至少需要4層函數嵌套。解法思路有2:一是從大到小,一是從小到大;我選擇從小到大的思路,模擬公式如下:
如果成績<60時,返回E,如果<70時,返回D,如果<80時,返回C,如果<90,返回B,否則返回A;將模擬公式的中的如果換成IF函數,若還是在E列中返回結果,E2對應的成績為D2,轉化成IF公式:
=IF(D2<60,"E",IF(D2<70,"D",IF(D2<80,"C",IF(D2<90,"B","A"))))
雖然只有4層嵌套,其中邏輯關係已經相當複雜了,但這還是在條件最簡,結果也是最簡的情況下,只要稍微一增加一點難度,光理清邏輯關係就讓人頭疼了,就更別說調試和修改了。
在日常工作中,可代替IF嵌套分級的函數有5個,而方法卻有4種,因為其中一種是組合,沒有錯,就是INDEX+MATCH組合,剩下的就是:LOOKUP,VLOOKUP或HLOOKUP函數,之所以能代替IF嵌套分級是因為它們有個共性,都支持近似值查詢,就是說:如果無法找到查找值,就返回一個相應規則下,與之相近的值,由於篇幅的原因,這裡只介紹LOOKUP的近似值查找規則。
LOOKUP函數是這種四種用法,唯一一個只有近似值查詢的函數,它有兩種用法,從參數多少上分,分為2參和3參用法;由於LOOKUP函數的詳細用法非本文重點,所以只介紹一下相對簡單的3參用法:
語法結構:LOOKUP(查找值,查找範圍,結果範圍)要玩轉LOOKUP函數,需要了解3點:
查找的規則:在查找範圍中,若沒有找到查找值,就返回一個小於查找值的最大值;若查找值小於查詢區域中的最小值,則返回#N/A;如果你想查找到一個明確的值,查找範圍必須按升序排列;否則返回的結果會是隨機的;當有多個結果時,會返回結果集合中的最後一條;正是LOOKUP的查找規則,限定了它的使用範圍和場景,但卻十分貼合分級的邏輯規則,比如>=90的成績,若表中只有90,而相鄰單元格為A,用LOOKUP查找,不是很容就返回等級A嗎?
不過在用之前,還需要創造2個條件,就是等級劃分必須是升序且唯一,這對於我們來說不是很容易嗎?只需手動創建即可。
具體操作如下:
創建init工作表,A1:B1,錄入:分界線,等級;A2:A6錄入:0,60,70,80,90;B2:B6分別錄入E,D,C,B,A;成績表,E2錄入=LOOKUP(D2*1,init!A$2:A$6,init!B$2:B$6)回車,滑鼠移至E2右下角,滑鼠變為實心十字,雙擊滑鼠左鍵;
對比2個方法,若增加分級,LOOKUP函數只需修改init工作表的配置信息即可,而IF嵌套就需要重新編寫公式,這也驗證了編程思想中的:配置大於邏輯的靈活和易維護。
雖然上面的3類方法各有自己的使用場景,只要使用得當,還是能給我們的工作帶來不少便利,也希望你能在閱讀中有所收穫,編寫公式的方法萬萬條,場景適合第一條。
本來想聊透這些內容,發現一篇文章根本不行,如果你想更深的了解其中哪種用法,可以用文中方法順序為編號,留言或私信告訴我,我會儘快安排上線,好了今天的文章就到這了,花葉草木深,工作要獎金,要得獎金法,找我胖廖晨。