ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: flx66

[已解决] 请教:怎样给学生成绩排等次(按比例排,如前15%的为A,等)算M值(详见内),

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-3-8 12:27 | 显示全部楼层
以下是引用slhenry在2004-3-8 10:37:00的发言:
PERCENTRANK({1,2,3,4,5,6,7,8,9,10},4) 等于 0.333 上面是帮助中的例子,不太明白是怎么样计算的,fieldsum兄能解释一下吗?
自己分析了一下。对于你的例子来说,如A2:A11输入以上数值(1-10),对于无重复值:
=COUNTIF($A$2:$A$11,"<4")/COUNTIF($A$2:$A$11,"<>4")---按帮助还原了这个公式。 我们可以这样理解,该数据中<4的只有3个,除数是统计除自身单元格以外的单元格个数。两数相除即是4在该数组上的百分比排位0.333333。再例如,10在其中的排位是9/9=1。 先请见下面的部分帮助:
A
数据
13
12
11
8
4
3
2
1
1
1

公式 说明(结果)
=PERCENTRANK(A2:A11,2) 2 在上面数据列表中的百分比排位(0.333,因为该数据集中小于 2 的值有 3 个,而大于 2 的值有 6 个,因此为 3/(3+6)=0.333)

另:我们还看一个例子,我觉得这种例子与帮助文档解释不符,因此觉得可能帮助文档有误,如果我们A2:A11输入:1,2,3,4,4,5,6,7,8,9(有重复值)
用上面公式计算结果与PERCENTRANK()计算不相同,因此我觉得PERCENTRANK的运算是这样的:
=COUNTIF($A$2:$A$11,"<4")/(COUNT($A$2:$A$11)-1)-------公式这样修改后就与该函数结果相同了。

综上,我理解该函数是上面这个公式原理,大家看看。
[此贴子已经被作者于2004-3-8 12:31:03编辑过]

TA的精华主题

TA的得分主题

发表于 2004-3-8 15:30 | 显示全部楼层
=HLOOKUP(PERCENTRANK($H$3:$H$428,H147),{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE) 请问该公式中的大括号是什么意思啊,是数组公式吗?又好像不是, 另外请解释一下:{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE)好吗?谢谢

TA的精华主题

TA的得分主题

发表于 2004-3-8 15:49 | 显示全部楼层
以下是引用幽谷苍狼在2004-3-8 15:30:00的发言:
=HLOOKUP(PERCENTRANK($H$3:$H$428,H147),{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE) 请问该公式中的大括号是什么意思啊,是数组公式吗?又好像不是, 另外请解释一下:{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE)好吗?谢谢
楼主应该看看Hlookup函数的帮助文档,FIELDSUN版主只是将第2个参数用 常量数组 代替了我们常用的 单元格引用 。其实原理是一样的。

TA的精华主题

TA的得分主题

发表于 2005-10-13 14:04 | 显示全部楼层

唉,我费了老半天的力气用VBA编程实现了这个M值(or R值)的求法。

Sub Mcomputing( ) Dim i, j, k, zero, class_start, class_end, ylesson As Integer Dim n_stuall, n_lesson, n_class, classstu As Integer Dim temp As Integer Dim temp1, temp2 As Double Dim lvl(5), n_lvl(6) As Integer Dim srcdata, classdata As Range Set srcdata = ActiveSheet.Range("A1").CurrentRegion n_stuall = srcdata.Rows.Count - 1 n_lesson = srcdata.Columns.Count - 3 n_class = Application.WorksheetFunction.Max(Range("a2", Range("a2").Offset(n_stuall - 1, 0))) lvl(0) = Round(n_stuall * 0.05, 0) lvl(1) = Round(n_stuall * 0.15, 0) lvl(2) = Round(n_stuall * 0.35, 0) lvl(3) = Round(n_stuall * 0.6, 0) lvl(4) = Round(n_stuall * 0.8, 0) lvl(5) = Round(n_stuall * 0.9, 0) For i = 0 To 6 n_lvl(i) = 0 Next i For i = 1 To n_lesson Cells(1, ((n_lesson + 3) + i)) = Cells(1, (3 + i)) & "名次 " Cells(1, (2 * n_lesson + 5 + i)) = Cells(1, (3 + i)) & "R " Next i

Cells(2, n_lesson + 4).Select ActiveCell.Formula = "=RANK(d2,d$2:d$400)" Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(n_stuall - 1, 0)), Type:=xlFillDefault Range(ActiveCell, ActiveCell.Offset(n_stuall - 1, 0)).Select Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(n_stuall - 1, n_lesson - 1)), Type:=xlFillDefault For i = 1 To n_class Cells(i + 1, 2 * n_lesson + 5) = Str(i) + "班" Next i class_start = 2 For i = 1 To n_class classstu = 0 For k = 1 To n_stuall If Cells(k + 1, 1) = i Then classstu = classstu + 1 End If Next k class_end = class_start + classstu - 1 For j = 1 To n_lesson For temp = class_start To class_end If Cells(temp, n_lesson + 3 + j) <= lvl(0) Then n_lvl(0) = n_lvl(0) + 1 ElseIf Cells(temp, n_lesson + 3 + j) <= lvl(1) Then n_lvl(1) = n_lvl(1) + 1 ElseIf Cells(temp, n_lesson + 3 + j) <= lvl(2) Then n_lvl(2) = n_lvl(2) + 1 ElseIf Cells(temp, n_lesson + 3 + j) <= lvl(3) Then n_lvl(3) = n_lvl(3) + 1 ElseIf Cells(temp, n_lesson + 3 + j) <= lvl(4) Then n_lvl(4) = n_lvl(4) + 1 ElseIf Cells(temp, n_lesson + 3 + j) <= lvl(5) Then n_lvl(5) = n_lvl(5) + 1 Else n_lvl(6) = n_lvl(6) + 1 End If Next temp temp1 = n_lvl(0) * 18 + n_lvl(1) * 14 + n_lvl(2) * 10 + n_lvl(3) * 6 + n_lvl(4) * 2 - n_lvl(5) * 8 - n_lvl(6) Cells(i + 1, (2 * n_lesson + 5 + j)) = temp1 / (n_lvl(0) + n_lvl(1) + n_lvl(2) + n_lvl(3) + n_lvl(4) + n_lvl(5) + n_lvl(6)) For zero = 0 To 6 n_lvl(zero) = 0 Next zero Next j class_start = class_end + 1 Next i Columns(Chr(Asc("A") + 2 * n_lesson + 5) & ":X").Select Selection.NumberFormatLocal = "0.000" ActiveSheet.Cells.Select Selection.Columns.AutoFit With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom End With With Selection.Font .Size = 12 End With

End Sub

TA的精华主题

TA的得分主题

发表于 2006-12-22 15:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-3-8 15:44 | 显示全部楼层
以下是引用幽谷苍狼在2004-3-8 15:30:00的发言:
=HLOOKUP(PERCENTRANK($H$3:$H$428,H147),{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE) 请问该公式中的大括号是什么意思啊,是数组公式吗?又好像不是, 另外请解释一下:{0,0.05,0.25,0.55,0.85,1;"E","D","C","B","A","A"},2,TRUE)好吗?谢谢

是一个两行六列的数组 第一行是0,0.05,0.25,0.55,0.85,1 第二行是E,D,C,B,A,A
[此贴子已经被作者于2004-3-8 15:56:21编辑过]

TA的精华主题

TA的得分主题

发表于 2004-3-8 15:09 | 显示全部楼层
PERCENTRANK结果是一个数据在一个数据集的百分比排位,与RANK函数有点相象,但只是以百分比表示其位置而已 还有一个对应的函数PERCENTILE,可以返回一个数据集中的百分位点的值。 当然这两个函数的结果都是近似值,尤其是在有大量重复数据的情况下,准确性很差。

TA的精华主题

TA的得分主题

发表于 2004-3-8 13:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢!

TA的精华主题

TA的得分主题

发表于 2004-3-8 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
PERCENTRANK({1,2,3,4,5,6,7,8,9,10},4) 等于 0.333 上面是帮助中的例子,不太明白是怎么样计算的,fieldsum兄能解释一下吗?

TA的精华主题

TA的得分主题

发表于 2004-3-8 10:34 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 11:49 , Processed in 0.042262 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表