被大多數人冷遇的CHOOSE函數,高手們卻很常用

如果Excel函數圈也有江湖,那CHOOSE函數絕對算得上掃地僧。它不如IF函數那般威震江湖,但它的本領卻更勝一籌。今天一燈就帶大家好好見識一下被大多數人冷遇的CHOOSE函數!

一、瞭解一下CHOOSE函數基本語句

CHOOSE函數使用 index_num 返回數值參數列表中的數值。使用 CHOOSE 可以根據索引號從最多 254 個數值中選擇一個。它的基本語句是:

=CHOOSE(index_num,value1,value2,...)

index_num:指定索引號的參數,它是1-254之間的任意整數,CHOOSE根據該值從參數列表value1到value254中選取對應的參數。index_num可以是數字、公式或單元格的引用。

value1-value254:參數列表中至少包含一個value參數,即value1是必須的,且參數列表中的value個數必須大於或等於 index_num的最大可能值。value可以是數字、單元格引用、定義的名稱、公式、函數或文本。

譬如下圖中的公式=choose(D2,B2,B3,B4,B5,B6),第一個參數D2值為3,則函數從B2到B6的數值中返回第3個值B4,即豬豬。

被大多數人冷遇的CHOOSE函數,高手們卻很常用

二、單一邏輯判斷能力,CHOOSE須遜IF一段香

看了上述CHOOSE函數的語句及解釋,不難發現,CHOOSE函數兼具了IF函數的功能。

IF的基本語句是IF(邏輯判斷,邏輯正確時返回值,邏輯錯誤時返回值),加之TRUE對應數值1,FALSE對應數值0,於是我們可以把IF函數語句翻譯成CHOOSE函數語句,即CHOOSE(2-邏輯判斷值,邏輯正確時返回值,邏輯錯誤時返回值)。

當邏輯判斷結果為TRUE,2-TRUE=2-1=1,CHOOSE函數選取value1作為邏輯正確返回值;

當邏輯判斷結果為FALSE,2-FALSE=2-0=2,CHOOSE函數選取value2作為邏輯錯誤返回值。

案例:

分別使用CHOOSE函數和IF函數來判斷成績是否合格,CHOOSE函數需使用2-邏輯值來將邏輯值轉化成索引號,略顯複雜!

被大多數人冷遇的CHOOSE函數,高手們卻很常用

三、多重條件判斷能力,CHOOSE更勝一籌

對於多重條件判斷,IF函數的忠實粉們會使用多重嵌套的方式來處理。但這樣做的結果是函數公式冗長且繁瑣,難以解讀。在嵌套過程中,我們需要多次使用IF函數。而使用CHOOSE函數來完成多重條件判斷,則較為簡潔,但需理解並掌握索引參數index_num的設置原理。接下來我們結合實例來講解下CHOOSE函數的多重條件判斷公式原理。

案例:

將下圖裡的考核等級轉化為對應的級別,每一個人的考核等級唯一。

此時如果用IF函數我們需要三重嵌套,這還是IF函數前套中比較簡單的情景,當條件數量增加時,IF函數嵌套公式的複雜程度也會隨之增大。而CHOOSE函數公式則無需嵌套,只需將index_num寫成1+邏輯判斷1*1+邏輯判斷2*2+......+邏輯判斷n*n的形式,將value 1設置為全部條件都不滿足時的“待改進”,其他value值與邏輯判斷條件依次對應排列即可。

IF函數公式如下:

=IF(I4="S","優秀",IF(I4="A","良好",IF(I4="B","一般","待改進")))

CHOOSE函數公式如下:

=CHOOSE(1+(B4="S")*1+(B4="A")*2+(B4="B")*3,"待改進","優秀","良好","一般")

被大多數人冷遇的CHOOSE函數,高手們卻很常用

公式說明:

CHOOSE函數的第一個參數index_num表示的是選取參數列表的索引號,當所有條件都不滿足時,所有邏輯條件均返回FALSE,1+∑邏輯條件n*n=1+0=1,選取value 1作為公式的最終返回值,因此value 1應當填入所有條件均不滿足時的目標結果,本例中即為“待改進”;

當第一個條件滿足時,其他條件都不滿足,1+∑邏輯條件n*n=1+1*1+0=2,選取value 2即“優秀”作為返回值;

當第二個條件滿足時,其他條件都不滿足,1+∑邏輯條件n*n=1+0*1+1*2+0=3,選取value 3即“良好”作為返回值;

以此類推。

因此,當各個邏輯條件彼此不包含時,CHOOSE函數的第一個參數應表示為1+∑邏輯條件n*n的形式,其餘參數順序為value all false,value if logical 1 true,value if logical 2 true......

相反的,如果各個邏輯條件間相互包含,則CHOOSE函數的第一個參數index_num應該寫成1+邏輯判斷1+邏輯判斷2+......+邏輯判斷n的形式,即1+∑邏輯條件n。這是因為,當邏輯n滿足時,邏輯n-1一定也滿足,所以滿足的條件個數再加1即為選取參數列表的索引號,無需運用*n的形式進行轉化。典型的問題是舊個稅時的勞務報酬收入計稅。譬如工資4500元,則其既大於4000,也大於800,把它們邏輯值相加再加1,得3,個稅就採用公式中Value 3即A2*0.8*0.2計算,如下:

=CHOOSE(((A2>800)+(A2>4000)+(A2>25000)+(A2>62500)+1),0,(A2-800)*0.2,A2*0.8*0.2,A2*0.8*0.3-

2000,A2*0.8*0.4-7000)

被大多數人冷遇的CHOOSE函數,高手們卻很常用

四、建立反向查找區域能力,CHOOSE全面佔優

在運用VLOOKUP函數進行反向查找時,我們會使用IF{1,0}結構來完成表格數據列的重構,從而使VLOOKUP的目標查詢值出現在查詢範圍的第一列。例如下圖,由於數據源區域中,姓名一列在年級列的右側,我們無法直接使用VLOOKUP進行查詢,於是我們用IF{1,0}將A列和C列數據重排順序,當判斷為真(1),輸出$C$10:$C$14列數據,判斷為假(0)輸出$A$10:$A$14列數據,從而新構建了以$C$10:$C$14為首列,$A$10:$A$14為第二列的數列作為查找區域,使VLOOKUP函數可以順利查詢到目標結果。

被大多數人冷遇的CHOOSE函數,高手們卻很常用

於是,問題來了。IF{1,0}結構僅能指定兩列數據的順序,無法指定多列數據的順序,來組合成新的查詢區域,這使得我們經常需要為相同查詢邏輯不同查詢列的多個單元格單獨設置公式,無法拖動填充公式匹配列查找。譬如當前就不能將B2公式拖動填充到C2中。IF{1,0}結構的這一缺陷,使得它在與CHOOSE的對比中一敗塗地!

下面是CHOOSE出手,直接一次性把3列數據重新排序構建出統一的查詢區域,公式可以直接從B2拖動填充到C2中:

=VLOOKUP($A2,CHOOSE({1,2,3},$C$10:$C$14,$A$10:$A$14,$D$10:$D$14),COLUMN(),0)

被大多數人冷遇的CHOOSE函數,高手們卻很常用

公式說明:

該公式的重點是我們運用CHOOSE{1,2,3}結構將表中三列數據A10:A14、C10:C14、D10:$D14重新按C10:C14排第1列,A10:A14排第2列,D10:$D14排第3列的順序組成一個新的數據區域用作Vlookup的查找區域。再借由COLUMN()返回公式所在單元格的列數,確定VLOOKUP查詢返回的列數。CHOOSE函數的該用法大大突破了IF{1,0}結構只能將兩列數據交換位置進行重建的限制,可以說是後者的威力加強版!


分享到:


相關文章: