奇葩贴吧考试:[转载]Excel中名次轻松排

来源:百度文库 编辑:中财网 时间:2024/05/07 16:50:51

[转载]Excel中名次轻松排

(2010-10-12 07:27:59) 转载原文标签:

转载

原文地址:Excel中名次轻松排作者:寒冰 Excel中名次轻松排
       在使用Excel计算各种成绩时,总会遇到排名次的问题。一般我们都会用“数据”菜单中的“排序”命令来排,再利用“以序列方式填充”的办法复制每一个单元格,来填上名次。这种办法操作起来比较麻烦,并且并列名次也得需要手动修正。有没有简便一些的排名次的办法呢?当然有了,实际上利用公式就可以轻松排定名次了!
      这里介绍两种方法:  
      (图1)      一是利用RANK函数排名次
      排名次函数RANK (x1,x2,x3),返回单元格x1在一个垂直区域x2中的排位名次,x3是排位的方式,x3为0或省略,则按降序排名次,x3不为0则按升序排名次。并且,RANK对相同数的排位相同,但相同数的存在将影响后续数值的排位(即有并列名次,后面的名次顺延)。例如对图1中的成绩排名次,则可在E2单元格中输入公式“=RANK(D2,D$2:D$27)”即可(“”不输入;D$2:D$27表示单元格区域,为了适应有可能出现的学生的增减情况,可将单元格区域范围放大,例如取D$2:D$100。下同),并将自动填充柄(将鼠标移到E2单元格的右下角,这时会出现一个黑十字,这就是自动填充柄)向下拖至E27单元格。这时每一个学生的名次就都自动填充在了相应的单元格中了。
  二是利用数组函数SUMPRODUCT来排名次。
     上面这种利用RANK函数排名次的方法,虽然简便,但有着较大有局限性。例如上例中,这些学生分属不同的年级与班级,并且在排列上也没有规律,如果要排出班级名次与年级名次,因为参与排序的数值不在一个连续的单元格区域中,RANK函数就无能为力了。这时该怎么办呢?巧妙地利用数组函数SUMPRODUCT就可以解决这一问题。
     SUMPRODUCT函数本身不是一个排序函数,而是一个求和函数,表示在给定的几组数组中将数组间对应的元素相乘,并返回乘积之和。其函数语法为:
SUMPRODUCT(array1,array2,array3, ...)
array1, array2, array3,…… 为2到30个数组,其相应元素需要进行相乘并求和。
      虽然SUMPRODUCT不是一个排序函数,但只要巧妙地设置条件,就可以利用它来实现排序有功能。
    例如,上面的例子中要求学生在本年级中的名次,就可在G2单元格中输入“=SUMPRODUCT((A$2:A$27=A2)*(D$2:D$27>D2))+1,并自动填充到G27单元格即可。

    这里函数算法是这样的:
(为了便于理解,将公式做一个小改动,道理是一样的)
G2=SUMPRODUCT((A$2:A$4=A2)*(D$2:D$4>D2))+1
函数首先判断第一个条件中符合要求的数值,符合为真,表示为TRUE;不符合为假,表示为FALSE。在A2:A4中全部为真,即表示为(TRUE, TRUE, TRUE)。
      其次判断第二个条件中符合要求的数值,符合为真,表示为TRUE;不符合为假,表示为FALSE。在D2:D4中,第一个假,后两个为真,即表示为(FALSE, TRUE, TRUE)。
这时候公式变为 :
G2=SUMPRODUCT((TRUE, TRUE, TRUE)*(TRUE,FALSE,FALSE))+1 。

      因为这是逻辑值,在Excel的计算过程中自动将它们转化为数值进行计算, TRUE和FALSE分别代表1和0。所以公式变为:
G2=SUMPRODUCT((1,1,1)*(0,1,1))+1

      然后接下来就是SUMPRODUCT的计算过程了
G2=(1*0+1*1+1*1)+1=2+1=3

      所以最后的结果等于3。表示这个学生的在我们计算的这三个学生中年级名次是第3名。要想计算这个学生在所有的26名学生中的年级名次,只需将公式中两个条件的范围改动一下就可以了。
      要想求出学生的班级名次,只需在求年级名次的公式基础上再加上一个限定班级的条件就可以了。在F2单元格中输入“=SUMPRODUCT((A$2:A$27=A2)*(B$2:B$27=B2)*(D$2:D$27>D2))+1” ,并自动填充到F27单元格即可。

       三 总结语
       利用RANK和SUMPRODUCT这两个函数就可以轻松搞定复杂的名次排列的问题。在Excel中,有大量的函数供我们使用,只要我们多去尝试,总会有办法来实现自己的想法的!