Excel如何自动统计一组数据的后十名成绩之和,而且学生的成绩或者人数是随时变化的?这个问题用函数来解答还是相对比较复杂的。先看下面我制作的源数据表:
学生的人数有一百多人,而且是乱序排列,我们如何利用一个公式将成绩排在最后n名的成绩加起来或者算平均值呢。
文:傲看今朝 图片来自网络
用哪一个函数才能得到10个最小的成绩呢?
首先,我们要考虑的第一个问题是:用哪一个函数才能得到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参数能够动态变化呢?
其次,我们要考虑的第二个问题是:我们的学生人数不固定的,如何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完成数组公式的录入。
最终的公式效果为:
{=SUM(SMALL(OFFSET(B1,,,COUNTA(B:B)-1),ROW(1:10)))}
期待我的回答解决了你的问题。更多精彩内容,欢迎关注我的头条号:傲看今朝职场派