民主测评去掉几个最高分,再去掉几个最低分的excel函数,

具体规则:
若参评人数小于等于20人,去掉一个最高,一个最低分,算平均数
若大于20小于等于60人,去掉二个最高二个最低分,算平均数
若大于60人小于等于100人,去掉三个最低,三个最高分,算平均数
大家对某个人评价时的选项是:特别满意,满意,基本满意,不满意,弃权,分别折合90;75;60;40分,弃权既不算分,也不作为去掉的对象。
比如对领导“王五”:特别满意为24个,满意26个;基本满意1个,不满意0个,弃权0个,那么先看24+26+1位于20与60,则先去掉两个最高分,去掉两个优,去掉两个最低分,则先去掉一个基本满意,类推再去掉一个满意,那么,评价人数为51人,去掉两个最高分,即去掉两个90分,去掉一个60分,去掉一个75分,剩下的总计为(24—2)*90+(26-1)*75+(1-1)*60+0*45=3855,剩下的人数为51-4=47;那么其平均分3855/47=82.02
我不知道如何进一步测试我发给你一写数据,你测试

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=
要注意的是注册之后不能马上发帖。
温馨提示:答案为网友推荐,仅供参考
相似回答