陣列公式~EXCEL(很難)

最近有個朋友問我,要如何在一堆資料裡面找所有A之中的最小值,

例如在表中我要找表中的類別C,然後再找出C之中數量的最小值,

有類別C是 C200(216),C400(514),C600(890),則最小值是C200(216),

我所知道的函數裡面有COUNTIF,SUMIF,但是就是沒有MAXIF,MINIF這些函數,

要達到MAXIF和MINIF的效果的話,就需要用到陣列公式

第一步:先定義資料表

選取儲存格A1:D10,按一下 Ctrl+Shift+F3 鍵,選【頂端列】,


EXCEL就會自動定義:項目、類別、編號、數量。

第二步:

儲存格G6輸入:=MIN(IF(B2:B10=G2,D2:D10,FALSE))

輸入完之後先別急著按ENTER或是離開公式,這時候按一下 Ctrl+Shift+F3 鍵,

公式就會自己變成{=MIN(IF(B2:B10=G2,D2:D10,FALSE))},

{}不能手動直接KEY進去,一定要按快捷建生成,

這樣就完成了,所謂的陣列公式,如下圖。


解決了朋友的問題之後,再解決下一個問題,第2個問題雖然感覺上很容易懂的敘述,

但是不用VBA巨集只靠函數方式完成真的還是需要想想,第2個問題是,

找到最小數值216之後,還要顯示最小數值的類別的所有數值,

也就是說216是屬於類別C,就要另外顯示類別C的所有數量(216、514、890),

這也是要使用到陣列公式,做法如下

儲存格H2:{=IFERROR(INDEX(資料,SMALL(IF(類別=$G$2,項目,FALSE),ROW(1:1))+1,3),"")}

儲存格I2:{=IFERROR(INDEX(資料,SMALL(IF(類別=$G$2,項目,FALSE),ROW(1:1))+1,4),"")}

填完公式之後把H2和I2選起來,往下拉大約10格欄位左右即可,如下圖


當變換G2裡面的類別,旁邊也會一起變動,如下圖


【感想】

要在不使用巨集的情況下完成很有挑戰性,缺點是當EXCEL裡面的公式欄位越多,

開啟EXCEL就會越久,甚至切換頁面的時候也會LAG,

不過經過這次我又了解EXCEL的另外一面,真的很神奇,學也學不完,

要感謝我的朋友出的難題。

-------------------------------------------------------------------------------------

【應用範例】

「國文>80且英文>75者的數學最高分」和「五科均及格者的英文最高分」

公式:

事前工作:先定義

選取儲存格B2:F26,按一下 Ctrl+Shift+F3 鍵,定義名稱:國文、英文、數學、社會、自然。


(A)找出國文>80且英文>75者的數學最高分

儲存格H2:{=MAX((國文>80)*(英文>75)*數學)}

解說:

這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵。

國文>80:在陣列公式中產生國文>80 的 True/False 陣列。

英文>75:在陣列公式中產生英文>75 的 True/False 陣列。

(國文>80)*(英文>75):其中的「*」執行 AND 邏輯運算,二者均為 True 時,結果才為 True。

(國文>80)*(英文>75)*數學):第二個「*」為執行「乘法」算術運算。而當 True/False 陣列執行算術運算時 True 視為 1、False 視為 0。本式子的結果會得符合二個條件者的數學成績陣列,不會任一個條件者的數學成績會被視為 0。

透過 MAX 函數從上式的數學陣列中取出最大值。


(B)找出五科均及格者的英文最高分

儲存格H5:{=MAX((國文>=60)*(英文>=60)*(數學>=60)*(社會>=60)*(自然>=60)*英文)}

這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵。

原理同 (1) 之說明。

結果如下



留言

這個網誌中的熱門文章

【Google 試算表】條件式格式設定

EXCEL 必學函數 “VLOOKUP”

清除"保護工作表"的密碼