EXCEL函数高手请进

我有一个学生成绩工作表,需要在不改变原表的情况下统计出各科总分从大到小人数的80%的学生的语文成绩总分。请高手解答。如:各科总分在J列,有50个人,就是从J列中(乱序的,不要排序)各科总分找出50*80%=40个人,最大分数的40个人,语文分数在C列,统计J列各科总分前40名人的语文总分。
谢谢txh2lan,我在里面也找了,也学习了,可是没有收获。
谢谢chation ,你的公式比较接近,可是大于第40个大数,那不就选了39个,而且重复的数据也不行
我写了一个望更正=SUM(OFFSET("J"&MATCH(LARGE(J3:J102,ROW(INDIRECT("1:"&ROUND(COUNT(J3:J102)*0.8,0))),J3:J102,0)+2),0,-7))
谢谢chation ,我也改了=,可是重复的问题怎样解决?
另外区域J3:J102和C3:C102是个大的范围,不一定都有数据,是个动态的区域。也就是说这是100个单元格,可能只有前面60个单元格有数据,也有可能是其他个数据。

=SUMPRODUCT(--RIGHT(LARGE(J3:J102*10^6+C3:C102,ROW(INDIRECT("1:"&ROUND(COUNT(J3:J102)*0.8,0)))),3))
如果要把班级条件加上,比如班级在B列,可把公式改为
=SUMPRODUCT(--RIGHT(LARGE((B3:B102="一班")*(J3:J102*10^6+C3:C102),ROW(INDIRECT("1:"&ROUND(COUNT(J3:J102)*0.8,0)))),3))这是求一班总分前80%的语文分数合计.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-01
如在空白列如K列输入公式如K2
=IF(J2>=PERCENTILE(IF($J$2:$J$51>0,$J$2:$J$51),0.2),A2,""),下拉,就在K列提出了80%即40人最大的数,并显示A列了姓名,否则为空白
计算总分公式
=SUMPRODUCT((K2:K51<>"")*(J2:J51))
你的说明中的公式,就是并列或者相同分数的就不能解决,因为LARGE函数不能将相同的数列出来。试试我的公式。
第2个回答  2010-08-01
解决分数重复问题:

简化模型,以数据在1到10行内
加以辅助列 K 列,在K1输入公式,并下拉复制到数据尾行:
=RANK(J1,$J$1:$J$10,1)+ROUND((COUNTIF($J$1:$J$10,J1)-1)/COUNTIF($J$1:$J1,J1)/COUNT($J$1:$J$10),3)

会在K列升序排出总分的名次,同分数的以行数靠前的排在前面,不会有相同的值

然后就可以按K列的大小值进行统计:

=SUMPRODUCT(--(K1:K10>=LARGE(K1:K10,COUNT(K1:K10)*0.8))*(C1:C10))

----------模型实例------------
C列 J列 K列(辅助列)
1 56 2.1
2 88 9
3 56 2.05
4 58 4
5 68 6
6 52 1
7 76 7
8 83 8
9 98 10
10 66 5
------------------
=SUMPRODUCT(--(K1:K10>=LARGE(K1:K10,COUNT(K1:K10)*0.8))*(C1:C10))
得出结果为46
=SUM(C1:C10)-C6-C3
得出结果也为46
--------------
其他问题,Hi我
第3个回答  2010-08-01
把问题作为内容、样表(03版,把现状和目标效果表示出来)作为附件发来看下 [email protected]
第4个回答  2010-08-01
假设你总分的数据在J2:J51,语文在G2:G51,要计算总分在前40名的人的语文成绩,而且如果正好在39-42名之类的有同分的情况,也要只取40名,公式如下
=SUM(SUBTOTAL(9,(OFFSET(C1,MATCH(LARGE(G2:G51+1/ROW(1:50),ROW(1:40)),G2:G51+1/ROW(1:50),),,1))))
同时按下CTRL+SHIFT+ENTER输入数组公式,略作解释,G2:G51+1/ROW(1:50)用来将总分加上一个不重复的小数序列,去除同分时的判断难题,LARGE(G2:G51+1/ROW(1:50),ROW(1:40))的意思是刚才的那个处理过的数据中取出前40名,MATCH(LARGE(G2:G51+1/ROW(1:50),ROW(1:40)),G2:G51+1/ROW(1:50),)是判断刚才前40名的位置,用来在OFFSET中返回前40名所在的行号,OFFSET再用这个行号在C列返回一个这些行号组成的序列,就是前40名的语文成绩,SUBTOTAL是处理OFFSET这种情况下的必用函数,直接用SUM是不行的,外面再套用SUM求出总和,略作解释,希望你能弄明白。
第5个回答  2010-08-02
不用辅助列,重复只取排在前面的,假设数据从第二行开始

=SUM((J2:J100-ROW(J2:J100)/COUNT(J:J)>=LARGE(J2:J100-ROW(J2:J100)/COUNT(J:J),COUNT(J:J)*0.8))*C2:C100)
ctrl+shift+enter结束