2006年12月20日 星期三

[EXCEL] 淺談陣列公式-高標低標的計算

 
  相關函數IF() / AVERAGE()

  什麼是「陣列公式」?套用 Excel 的說明檔:「針對一或多組值執行多個計算,然後傳回單一結果或多個結果的公式。陣列公式括在大括弧 { } 中,且藉由按 CTRL+SHIFT+ENTER 輸入。」

  舉例來說,一般公式 =IF(A1>60,A1,"") 是以單一儲存格 A1 為輸入值,計算結果也是單一值。這時,如果把 A1 改成陣列 A1:A5,再按 CTRL+SHIFT+ENTER 完成輸入,成為陣列公式 {=IF(A1:A5>60,A1:A5,"")},結果會如何?

##CONTINUE##
  答案是 Excel 會做 5 次 IF() 計算,每次的輸入值分別是 A1/A2/A3/A4/A5,最後得到 5 組答案,組成一個結果陣列。這個結果陣列,可以進一步當做其他函數的輸入值,或是把結果陣列的第一組結果,也就是針對 A1 運算所得的結果,顯示在儲存格中。

  舉個實際的例子,如下表,

  10 組分數,如果要計算平均分數,B12 =AVERAGE(B2:B11) 即可。但是如果要計算高標呢?

  所謂高標,是指分數高於平均分數的所有人的平均分數。傳統的做法是,在 C 欄輸入公式把高於平均分數的人先挑出來,C2 =IF(B2>$B$12,B2,""),公式往下複製,再將 C 欄做平均即可,結果如 C12 =AVERAGE(C2:C11)

  但是,如果不想多出一個 C 欄,想直接算出結果呢?那就得靠「陣列公式」了。如 B13,輸入陣列公式

=AVERAGE(IF(B2:B11>B12,B2:B11,""))

  再按 CTRL+SHIFT+ENTER 完成輸入,就可以直接得到答案。

  看出奧妙了嗎?B13 的陣列公式其實就是 C12 和 C2:C11 的組合!C2:C11 的內容,和陣列公式做了十次 IF() 運算之後產生的結果陣列一樣,只是在陣列公式中,這個結果陣列在 Excel 內部就做掉了,外面就不必再多用一個 C 欄來計算。

  看懂了陣列公式的奧妙,那低標就不困難了,B14

=AVERAGE(IF(B2:B11<B12,B2:B11,""))

  再按 CTRL+SHIFT+ENTER 完成輸入。

  陣列公式注意事項:
  • 一定要以 CTRL+SHIFT+ENTER 完成輸入
  • 公式中用到的陣列大小一定要一樣
2007-3-29 補充:

  如果高標的定義是「全班分數前50%的平均」,則可以利用函數 QUARTILE() 來取得全班前 50% 的分數分界點。新的公式為

=AVERAGE(IF(B2:B11>QUARTILE(B2:B11,2),B2:B11,""))

  記得一樣要按 CTRL+SHIFT+ENTER 成為陣列公式

3 意見:

Cherry 2008/12/17 晚上8:33 提到...

請問你高低標的算法,是有專家認定的嗎?因為我的論文需計算高低標,想參考你的公式,但此公式需有專家認定或論文支持才可引用,謝謝!!

whitefox 2008/12/18 上午8:35 提到...

高低標的算法似乎沒有一定的標準,我的算法只是從網路上找到的多種算法中的一種,沒有任何人認定過。如果你需要有專家認定過的公式,建議你參考參考就好,不要直接採用。

clting 2010/3/13 下午6:39 提到...

您算出的低標答案是54.7,但依照公式算出應為53.6我用的公式是
={AVERAGE(IF(B2:B11<QUARTILE(B2:B11,2),B2:B11,""))}