EXCEL成绩工资统计公式使用实例详解

因为工作需要,花了点时间整理出在EXCEL中成绩统计所用到的公式,统计过程中解决不到的问题一定能在这里受到启发。因为有学生成绩,所以excel文件不便上传,如果有问题或想交流,请qq:10082823讨论 或youufis@sina.com

============================================================
公式函数:
注:数组公式 ctrl+shift+enter 结束输入

1、总分:sum
   三科总分:=SUM(D2:F2)

2、级排名:rank
   三科级排名:=RANK(G2,G$2:G$630)

3、班排名:sumproduct
   =SUMPRODUCT((A$2:A$630=A2)*(B$2:B$630<>B2)*(G$2:G$630>G2))+1
    * 号表示and的意思,就是条件"与"
   条件一:A$2:A$630=A2 表示所在班
   条件二:B$2:B$630<>B2 除了自己
   条件三:G$2:G$630>G2 大于自己成绩
   加1就是表示自己所在班上的名次

4、级平均分:average
   =AVERAGE(D2:D628)

5、班平均分 averageif (2007版)
   =AVERAGEIF(全级!$A$2:$A$628,"=1",全级!D2:D628)
 或
   班平均分 average (2003版)数组函数
  {=AVERAGE(IF(全级!$A$2:$A$628=1,全级!$D$2:$D$628))}

 注:多条件平均 {=AVERAGE(IF((全级!$A$2:$A$628=1)*(全级!$D2:$D628>90),全级!$E$2:$E$628))}

6  级及格人数 countif
   =COUNTIF(D2:D628,">=90")

7   班及格人数 countifs (2007版)
    =COUNTIFS(全级!$A$2:$A$628,"=1",全级!D2:D628,">=90")

    班及格人数 sumproduct(2003版) 相当于多条件计数
    =SUMPRODUCT((全级!$A$2:$A$628=1)*(全级!$D$2:$D$628>=90))

   或{=count(if(全级!$A$2:$A$628=1)*(全级!$D$2:$D$628>=90),全级!$B$2:$B$628))}

8  级及格率 =COUNTIF(D2:D628,">=90")/COUNT(D2:D628)
   班及格率 =COUNTIFS(全级!$A$2:$A$628,"=1",全级!D2:D628,">=90")/COUNTIF(全级!$A$2:$A$628,"=1")

9   级优秀人数 =COUNTIF(D2:D628,">=120")
    班优秀人数 =COUNTIFS(全级!$A$2:$A$628,"=1",全级!D2:D628,">=120")

10  级优秀率 =COUNTIF(D2:D628,">=120")/COUNT(D2:D628)
    班优秀率 =COUNTIFS(全级!$A$2:$A$628,"=1",全级!D2:D628,">=120")/COUNTIF(全级!$A$2:$A$628,"=1")

11  级最高分 =MAX(D2:D628)
    班最高分 {=MAX(IF(全级!$A$2:$A$628=1,全级!D2:D628))}数组公式

12  级标兵 OFFSET
 =OFFSET(全级!$V1,MATCH(MAX(全级!$V$2:$V$628),全级!$V2:$V628,0),-19)

        :返回最大值所在行号,MATCH(MAX(全级!$V$2:$V$628),全级!$V2:$V628,0)
        :全级!$V1 指出参照列是
        :-19 相对参照列 全级!$V1 向左偏移19列
       
       *指定条件:{=OFFSET(全级!$V1,MATCH(MAX(IF(全级!$A$2:$A$628>1,全级!$V$2:$V$628)),全级!$V$2:$V$628,0),-19)}

13   班标兵 VLOOKUP 多条件返回值(学习了半天才完全明白什么意思)
     =VLOOKUP(MAX(IF(全级!$A$2:$A$628=1,全级!$V$2:$V$628))&1,IF({1,0},全级!$V$2:$V$628&全级!$A$2:$A$628,全级!$C$2:$C$628),2,FALSE)
     :返回指定条件(1班)的最大值:MAX(IF(全级!$A$2:$A$628=1,全级!$V$2:$V$628))
     :&1 增加一个条件(1班),相当于是1班的最大值
     :IF({1,0},全级!$V$2:$V$628&全级!$A$2:$A$628 生成一个新的数组。
     :全级!$C$2:$C$628 为Vlookup多增加一列数据
     :2,返回新数组的第二列,指C列
=====================================================

2013-7-12补简化公式       =INDEX(全级!$C$2:$C$627,MATCH(MAX(IF(全级!$A$2:$A$627=2,全级!$V$2:$V$627)),全级!$V$2:$V$627,0))
1、找出班最高分:MAX(IF(全级!$A$2:$A$627=2,全级!$V$2:$V$627)),
2、MATCH根据最高分返回最高分所在的行号
3、INDEX根据行号返回需要的所在列的数据

=====================================
14   单科金牌(多个返回的数据)
      =IF(COUNTIF(全级!$D$2:$D$628,MAX(全级!$D$2:$D$628))>=ROW()-1,INDEX(INDIRECT("全级!$c$2:$c$628"),SMALL(IF(INDIRECT("全级!$d$2:$d$628")=MAX(全级!$D$2:$D$628),ROW(INDIRECT("全级!$d$2:$d$628"))-1,65536),ROW(1:1))),"")
      :COUNTIF(全级!$D$2:$D$628,MAX(全级!$D$2:$D$628)) 有几个要返回的数据,即相同的值
      :COUNTIF(全级!$D$2:$D$628,MAX(全级!$D$2:$D$628))>=ROW()-1 做为if的条件:如果超过个数,就返回一个空值"",否则把返回的数据求出来。
      :INDIRECT("全级!$c$2:$c$628") 返回C列的所有姓名,这里等同 全级!$c$2:$c$628
      :INDIRECT("全级!$d$2:$d$628") 返回D列的所有成绩
      :IF(INDIRECT("全级!$d$2:$d$628")=MAX(全级!$D$2:$D$628),ROW(INDIRECT("全级!$d$2:$d$628"))-1,65536) 如果找到条件中的值,返回它的行号,否则返回65536,成为small的第一个参数,数据数组
      :ROW(1:1)返回值是1,表示第一满足条件的数据,向下填充公式,就变成ROW(2,2),返回值就是2,表示要找第二个满足条件的数据
      :index根据行号返回满足条件的数据。数据在全级!$c$2:$c$628中,

15    优胜奖(比如总成绩级前60名为成绩优胜一等奖,级60-120之间二等奖)重点是要考虑相同成绩的
 =OFFSET(全级!$V$1,MATCH(LARGE(全级!$V$2:$V$628+1/ROW(全级!$V$2:$V$628),ROW()-2),全级!$V$2:$V$628+1/ROW(全级!$V$2:$V$628),0),-19)
        LARGE(全级!$V$2:$V$628+1/ROW(全级!$V$2:$V$628),ROW()-2):因为large只能返回相同值中的第一个数据,所以在这里要把成绩变成是唯一的小技巧:把成绩加上成绩所在行号的倒数。这时成绩就变成唯一值
        在MATCH中的第二参数一定也加上行号的倒数,否则就会找不到出错。

 ===================================

补充 优胜奖(多条件):主要用IF的多条件:
*号是and,条件1*条件2*条件3
+号是or   ,  条件1+条件2+条件3
 

=OFFSET(全级!$V$1,MATCH(LARGE(IF((全级!$A$2:$A$627>=5)*(全级!$A$2:$A$627<=8),全级!$V$2:$V$627+1/ROW(全级!$V$2:$V$627)),ROW()-2),全级!$V$2:$V$627+1/ROW(全级!$V$2:$V$627),0),-19)

=OFFSET(全级!$V$1,MATCH(LARGE(IF((全级!$A$2:$A$627<5)+(全级!$A$2:$A$627>8),全级!$V$2:$V$627+1/ROW(全级!$V$2:$V$627)),ROW()-32),全级!$V$2:$V$627+1/ROW(全级!$V$2:$V$627),0),-19)

============================================

2013-1-11补
1、查找满足条件列:AE列中数据是本科的,即原始!$AE$3:$AE$318")="本科
2、返回满足条件列相对应列的数据,比如A列,B列,本例返回是A列数据,即原始!$A$3:$A$318
3、向下拖动即可。

=INDEX(INDIRECT("原始!$A$3:$A$318"),SMALL(IF(INDIRECT("原始!$AE$3:$AE$318")="本科",ROW(INDIRECT("原始!$AE$3:$AE$318"))-2,65536),ROW(1:1)))

 ==========================

2013-8-26记 IF函数的返回需要的数据区域
INDEX SMALL IF ROW

以上公式简化成:
=INDEX(原始!A:A,SMALL(IF(原始!$AE$3:$AE$318="本科",ROW(原始!$AE$3:$AE$318),65536),ROW(A1)))

1、INDEX的第一个参数是A:A 指A列,不用范围表示
2、ROW根据IF的条件返回是绝对行号,不用相对值表示
3、ROW(A1)表示返回第一个要找的结果

 =========================================
2013-9-8 match函数可以做两个数组区域相减操作(也叫去重复值操作)
如:从第93行起取依次取25名1或2或3或4班的学生作为一等奖,然后再从93行起依次取30名学生作为二等奖,但不包括前25名的一等奖。
其实就是从第93行起减去已取的25名一等奖的学生,依次再取30学生(已取25学生的数据区域为:$J$4:$J$28)
公式:=INDEX(理排!C:C,SMALL(IF(ISERROR(MATCH(理排!$C$93:$C$318,$J$4:$J$28,0)),ROW($93:$318),65536),ROW(C1)))
1 ISERROR(MATCH(理排!$C$93:$C$318,$J$4:$J$28,0))  找不到的值就是不重复值
2、返回ROW($93:$318),即所在相应的行号,否则用65536填充

去$B$2:$B$11列中的重复值,把不重复值依次求出来
=INDEX(B:B,SMALL(IF(MATCH($B$2:$B$11,$B$2:$B$11,0)=ROW($B$2:$B$11)-1,ROW($B$2:$B$11),65536),ROW(1:1)))
1、MATCH($B$2:$B$11,$B$2:$B$11,0) 找到相应值的第一个行号
2、=ROW($B$2:$B$11)-1 和自己本身所在的行号比较,如果相等,则为不重复的值,并返回该值的行号ROW($B$2:$B$11),否则用65536填充。

=====================================================
2013-9-12:查找D列中的多个最大值,并返回相对应的A列值(返回多值问题)
F1单元格公式:=INDEX(A$1:A$14,SMALL(IF((D$1:D$14)=MAX(D$1:D$14),ROW(D$1:D$14),65535),ROW(1:1)))

match只能返回第一个找到值的行号,当有多个值需要返回的时候用IF构造数组,返回对应值的所在行号。

================================================
2013-10-14:记
A2=2013-12-20-伦教中学-B3.DOC                 要求从字符中取汉字
=MID(A2,MATCH(1,N(MID(A2,ROW($1:$99),1)>"吖"),),LENB(A2)-LEN(A2)) 数组公式   吖最小的汉字 ??畲蟮暮鹤?/p>

时间: 2024-09-12 17:32:01

EXCEL成绩工资统计公式使用实例详解的相关文章

Android 中读取Excel文件实例详解

Android 中读取Excel文件实例详解 最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一...),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下. 闲话一下Excel中工作簿和工作表的区别: 工作簿中包含有工作表.工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件. 好了,开始读取表格文件吧. 前提 首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下.

php 正则表达式实例详解(适合初学者)

php教程 正则表达式实例详解(适合初学者) 数学公式正则表达式: (?'kh'()*([-+]){0,1}[0-9.]+(?'-kh'))*([+-*/]{1}(?'kh'()*((?<=()([-+]){0,1})?[0-9.]+(?'-kh'))*)+(?('kh')(?!)) 匹配加减乘除数学公式,如:((1+2)-3*4) (?'kh'()*([-+]){0,1}[0-9.]+(?'-kh'))*([+-*/]{1}(?'kh'()*((?<=()([-+]){0,1})?[0-9.

Oracle排名函数(Rank)实例详解_oracle

--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_NAME SCORE 1 张三 语文 80.00 2 李四 数学 80.00 1 张三 数学 0.00 2 李四 语文 50.00 3 张三丰 语文 10.00 3 张三丰 数学 3 张三丰 体育 120.00 4 杨过 JAVA 9

实例详解CSS的继承性及其应用

css|继承|详解 所谓CSS的继承是指被包在内部的标签将拥有外部标签的样式性质.继承特性最典型的应用通常发挥在整个网页的样式预设,需要指定为其它样式的部份设定在个别元素里即可.这项特性可以给网页设计者提供更理想的发挥空间.但同时继承也有很多规则,应用的时候容易让人迷惑,donger今天就专门和大家聊聊这方面的应用. 正文 CSS是层叠样式表(Cascading Style Sheets)的简称,它的规范代表了互联网历史上一个独特的发展阶段.现在对于从事网页制作的朋友来说,很少没有听说过CSS了

PHP数据的提交与过滤基本操作实例详解_php技巧

本文实例讲述了PHP数据的提交与过滤基本操作.分享给大家供大家参考具体如下 1.php提交数据过滤的基本原则 1提交变量进数据库时我们必须使用addslashes()进行过滤像我们的注入问题一个addslashes()也就搞定了.其实在涉及到变量取值时intval()函数对字符串的过滤也是个不错的选择. 2在php.ini中开启magic_quotes_gpc和magic_quotes_runtime.magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠. mag

Oracle触发器用法实例详解_oracle

本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需要说明一下,触发器可以分为语句级触发器和行级触发器.详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例: 1.

PHP文件上传类实例详解_php技巧

本文实例讲述了PHP文件上传类.分享给大家供大家参考,具体如下: 这里演示了FileUpload.class.php文件上传类,其中用到了两个常量,可在网站配置文件中定义: define('ROOT_PATH',dirname(__FILE__)); //网站根目录 define('UPDIR','/uploads/'); //上传主目录 具体代码如下: <?php //上传文件类 class FileUpload { private $error; //错误代码 private $maxsiz

PHP与jquery实时显示网站在线人数实例详解_php实例

我们在一些应用中需要动态展示数据,比如当前在线人数,当前交易总额,当前汇率等等,前端页面需要实时刷新获取最新数据.本文将结合实例给大家介绍使用jQuery和PHP来实现动态数字展示效果. 本例假设要在页面上动态展示(无需刷新整个页面,只是局部刷新动态数字)当前在线用户数,常见在一些统计平台上应用.在HTML页面中只需定义以下结构: <div class="count">当前在线:<span id="number"></span>&

MySQL性能瓶颈排查定位实例详解_Mysql

本文实例讲述了MySQL性能瓶颈排查定位的方法.分享给大家供大家参考,具体如下: 导读 从一个现场说起,全程解析如何定位性能瓶颈. 排查过程 收到线上某业务后端的MySQL实例负载比较高的告警信息,于是登入服务器检查确认. 1. 首先我们进行OS层面的检查确认 登入服务器后,我们的目的是首先要确认当前到底是哪些进程引起的负载高,以及这些进程卡在什么地方,瓶颈是什么. 通常来说,服务器上最容易成为瓶颈的是磁盘I/O子系统,因为它的读写速度通常是最慢的.即便是现在的PCIe SSD,其随机I/O读写