营养面部神经的药物:excel函数:在职工互相民主测评打分后,去掉5%的最高分和5%的最低分后求算术平均数的函数怎么编?

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 08:16:53

Public Function PJS(Cellbegain As Range, Cellend As Range) As Single
Dim iMax, iMaxNow, iMin, iMinNow, iCount, iCountNow As Single
Dim rRange As Range
Set rRange = Range(Cellbegain, Cellend)
iCount = rRange.Count
iCountNow = 0
iMax = 0
iMin = 0
Do Until iCountNow >= iCount * 0.05
iMax = WorksheetFunction.Max(rRange)
iMin = WorksheetFunction.Min(rRange)
iCountNow = iCountNow + 1
iMaxNow = iMaxNow + iMax
iMinNow = iMinNow + iMin
Loop
PJS = (WorksheetFunction.Sum(rRange) - iMaxNow - iMinNow) / (iCount - iCountNow * 2)
End Function

试试看吧。水平有限,程序还有些不完善,没有错误判断,关键是我不知道你的详细想法,我也没有测试结果是否正确,但思路肯定不会有问题的。
还有使用的时候格式应和如下一样:psj("a1","a10")
a1是开始数据区域,a10是结束数据区域。别忘记加引号!
如果不满意可以去ooffice精英俱乐部论坛vba板块求助,里面高手如云而且热心。地址:
http://www.officefans.net/cdb/forumdisplay.php?fid=1&page=
要注意的是注册之后不能马上发帖。

员工打分列:A--------假设30人
分数排位列:B--------=RANK(A1,A$1:A$30,1)
确认分数有效列:C---=IF(OR(B1>=30*0.95,B1<=30*0.05)," ",A1)
下拉复制B\C列
计算:---------==ROUND(SUM(C1:C30)/COUNT(C1:C30),2)
应该可以了!