|
楼主 |
发表于 2013-11-11 10:42
|
显示全部楼层
本帖最后由 cyj153 于 2013-11-11 10:44 编辑
CheryBTL 发表于 2013-11-11 09:36
已改三纯数字 就方便多了,见附件:
另外,对于不同年级也可以通过数字来先代替,后来再还原即可。
谢谢,能否将这段代码合并起来。用10楼附件
Sub 名次统计()
Dim ar, re, per, temp
Dim i As Integer, j As Integer, Rnum As Integer
per = Array(10, 9, 7, 6, 5, 4, 3, 2, 1) '定义一个常量数组,第一名10分,第二名9分,依次类推
Rnum = Sheet5.[bp65536].End(3).Row '确认D列最后一行数据的行数
ar = Sheet5.Range("bq7:by" & Rnum) '提取E列到M列所有数组并赋值给数组ar
ReDim re(1 To UBound(ar), 1 To 2) '重定义结果数组,与源数据纬度一样,一列是总分,一分是排名
ReDim temp(1 To UBound(ar)) '定时临时数组,用来存放处理后的总成绩(总分+各项成绩处理的成绩)
For i = 1 To UBound(ar)
For j = 1 To UBound(ar, 2)
re(i, 1) = re(i, 1) + ar(i, j) * per(j - 1)
temp(i) = temp(i) + ar(i, j) / 10 ^ (j * 2)
Next j
temp(i) = temp(i) + re(i, 1)
Next i '得到结果数组第一列的总分和处理过后的临时数组
For i = 1 To UBound(re)
For j = 1 To UBound(re)
If temp(i) < temp(j) Then re(i, 2) = re(i, 2) + 1
'通过临时数组排序
Next j
re(i, 2) = re(i, 2) + 1
Next i
Sheet5.[bz7].Resize(UBound(re), 2) = re '输出总分和排名
End Sub
|
|