-
1 # 傲看今朝
-
2 # wangsir1121
樓上的回答不夠嚴密。現實生活中如果這組資料是手動輸入的考試成績,很有可能有缺考。缺考的成績處理有人喜歡寫0,有人喜歡空起來什麼都不填,有時候我們不會統計缺考的排名。
還有一種情況,這組資料是由公式計算得到的結果,含有空值和0,這種寫公式就要特別注意空值。
如果這組資料是考試成績,缺考考生的成績為空,交白卷或全錯的成績為0,我們需要統計非空和非零資料排名最後10名的成績和,如圖
B2輸入公式
=SUM(SMALL(IF(A2:A1048576>0,A2:A1048576),ROW(1:10))),然後按ctrl+shift+enter
如果我們要統計非空資料排名最後10名的成績和,B2公式為
=SUM(SMALL(IF(A2:A1048576<>"",A2:A1048576),ROW(1:10))),然後按ctrl+shift+enter
這裡我們來個擴充套件,因為中國式排名的最後10名和國際排名的最後10名沒有區別,我們分別來求國際排名的前10名成績和與中國式排名的前10名成績和。
假設A2:A25的資料手動輸入,如圖:
首先計算中國式排名,B2輸入
=SUMPRODUCT(($A$2:$A$25>A2)/COUNTIF($A$2:$A$25,$A$2:$A$25))+1
下拉填充至B25
這裡A2:A25的空值如果是公式產生,B2:B25就會得到錯誤結果,修改B2公式
=(A2<>"")*(SUMPRODUCT(($A$2:$A$25<>"")*($A$2:$A$25>A2)/COUNTIF($A$2:$A$25,$A$2:$A$25))+1),下拉填充至B25
這裡空值的排名為0,方便我們求和,如圖
怎麼計算中國式排名前10名的和呢?就是統計名次大於0,不大於10的分數的和,如圖:
C2輸入公式=SUM(IF((B2:B25>0)*(B2:B25<=10),A2:A25)),然後按ctrl+shift+enter
如果計算國際排名前10名的和,D2輸入公式
=SUM(LARGE(IF(A2:A25<>"",A2:A25),ROW(1:10))),然後按ctrl+shift+enter.
-
3 # Teaching小學
用excel自動統計一組資料的後十名,要用SMALL(array,k)函式,SMALL的意思就是“小的”。函式中的array表示要求第k個最小值點的數值陣列或數值區域,k表示要返回的最小值點在陣列或資料區中的位次。
首先用row(1:10)表達出k的值{1;2;3;4;5;6;7;8;9;10},再用SMALL(B:B,ROW(1:10)),提取出B列成績中最小的10個成績,最後用求和函式sum求出這10個成績的總和(還可以用函式average求出這10個成績的平均值等),公式為=SUM(SMALL(B:B,ROW(1:10)))。特別注意公式中因涉及到了陣列,要用{ }把公式括起來,但不能手工錄入{ },一定要按下CTRL+SHIFT+ENTER來加{ }。
表中只象徵性的錄入了14名學生的成績,可以隨意增減學生人數。有一個學生就必須錄入一個成績,就算是0分也必須錄入,沒有學生姓名的行的成績列單元格須是空值即不能錄入任何數值。
如果要計算後20名的成績總和,可以把公式中的row(1:10)變更為row(1:20)。
回覆列表
Excel如何自動統計一組資料的後十名成績之和,而且學生的成績或者人數是隨時變化的?這個問題用函式來解答還是相對比較複雜的。先看下面我製作的源資料表:
學生的人數有一百多人,而且是亂序排列,我們如何利用一個公式將成績排在最後n名的成績加起來或者算平均值呢。
首先,我們要考慮的第一個問題是:用哪一個函式才能得到10個最小的值呢?毫無疑問,我們用min函式只能得到一個最小的成績,因此不能用。我們只能用small函式,這個函式主要就是用來取第n小的資料的。此函式語法為:=small(array,k)僅有兩個引數,array代表單元格區域,我們需要在某個區域裡取第n小的值,k代表第n,我們比如我們要取倒數第一名,k就為1,倒數第二名,k就為2……這裡我們要取倒數第一名到倒數第10名,因此small函式第二引數可以寫為:=small(array,{1;2;3;4;5;6;7;8;9;10}),也可以寫成:=small(array,row(1:10))
其次,我們要考慮的第二個問題是:我們的學生人數是不固定的,如何small的array引數能夠動態變化呢?為了讓array引數能夠動態變化,我們可以使用函式來動態引用區域。具體可以用offset函式做。透過offset函式我們可以方便快捷地得到B列的動態區域。offset函式語法如下:=offset(reference,rows,cols,[height],[width]),此函式包括5個引數,第一個引數引用區域起點,本例中起點為B1單元格;第二個引數rows代表偏移的行數,咱們要取的值就是整個B列,因此行數偏移為0,第三引數column代表偏移的列數,咱們第一引數就在B列,因此也不做偏移,值為0;第四引數height代表區域的高度,在這裡區域的高度就取決於B列中有多少個非空單元格然後減掉1(不包括b1),因此我們可以透過=counta(B:B)-1公式得到;第五個引數表示區域的寬度,這裡為1,第五引數由於打了中括號,我們使用預設值,因此直接可以省略,因此最終offset的公式為:=OFFSET(B1,0,0,COUNTA(B:B)-1)。透過這一步我們的small函式已經寫好了:
=SMALL(OFFSET(B1,0,0,COUNTA(B:B)-1),row(1:10))
透過此公式,我們便可以得到最後10名的成績。
最後,我們可以利用sum函式或者average函式對最後10同學的成績求和或者算平均值。因此只需要在第二步得出的公式外層加一個sum函式或者average函式即可。
=average(SMALL(OFFSET(B1,0,0,COUNTA(B:B)-1),row(1:10))) =sum(SMALL(OFFSET(B1,0,0,COUNTA(B:B)-1),row(1:10)))輸入完公式後,還有一點極其重要,因為本公式為陣列公式,大家輸入完後不要敲回車,而是按下CTRL+SHIFT+ENTER完成陣列公式的錄入。最終的公式效果為: