我有一个电子表格,上面有学生每周的考试成绩。它有5个字段,名称(A列)、年份(B列)、级别(C列)、周(D列)和分数(ColE)。每个学生在工作表上都有自己的区块,每一行区块由和空行分隔。行块的大小会有所不同。(请参见下文)。
我有代码可以将分数(E列)从高到低排序(参见排序前和排序后)
我想做的是在week列和score列之间插入另一列,该列给出排序后每个分数的位置,如下图3所示。我认为这需要某种排序过程和循环。还要注意的是,有时某个学生在某些周的成绩可能是相同的,因此会出现联合排名(或第二名或第三名等),就像约翰·埃利斯(John Ellis)和菲尔·西姆(phil simm)的联合排名一样,前者有两组54分,后者有一组1分,后者有一组4分。
希望这有意义。非常感谢您的帮助
在spreadshhet图的底部,我还放置了用于循环和排序列E(分数列)的代码。
BEFORE SORT(Fig1)
name year level week score
jill evans 5 2 10 56
jill evans 5 2 11 49
jill evans 5 2 12 77
jill evans 5 2 13 84
empty empty empty empty empty
john ellis 3 4 10 45
john ellis 3 4 11 54
john ellis 3 4 12 54
john ellis 3 4 13 29
john ellis 3 4 14 66
empty empty empty empty empty
phil simm 4 6 10 89
phil simm 4 6 11 76
phil simm 4 6 12 41
phil simm 4 6 13 41
phil simm 4 6 14 56
phil simm 4 6 15 59
phil simm 4 6 16 61
phil simm 4 6 17 61
AFTER SORT(Fig2)
name year level week score
jill evans 5 2 11 49
jill evans 5 2 10 56
jill evans 5 2 12 77
jill evans 5 2 13 84
empty empty empty empty empty
john ellis 3 4 13 29
john ellis 3 4 10 45
john ellis 3 4 11 54
john ellis 3 4 12 54
john ellis 3 4 14 66
empty empty empty empty empty
phil simm 4 6 12 41
phil simm 4 6 13 41
phil simm 4 6 14 56
phil simm 4 6 15 59
phil simm 4 6 16 61
phil simm 4 6 17 61
phil simm 4 6 11 76
phil simm 4 6 10 89
FIG3 with the position row included between week col and score col
name year level week position score
jill evans 5 2 11 1 49
jill evans 5 2 10 2 56
jill evans 5 2 12 3 77
jill evans 5 2 13 4 84
empty empty empty empty empty empty
john ellis 3 4 13 1 29
john ellis 3 4 10 2 45
john ellis 3 4 11 3 54
john ellis 3 4 12 3 54
john ellis 3 4 14 4 66
empty empty empty empty empty empty
phil simm 4 6 12 1 41
phil simm 4 6 13 1 41
phil simm 4 6 14 2 56
phil simm 4 6 15 3 59
phil simm 4 6 16 4 61
phil simm 4 6 17 4 61
phil simm 4 6 11 5 76
phil simm 4 6 10 6 89
因此,“位置”列反映排序后分数的新位置。
如果两个得分相同,那么这将是一个联合位置,就像约翰·埃利斯(John Ellis)以两组54分的成绩并列第四,菲尔·西姆(phil simm)以第一和第四的成绩并列第四。
希望这没有什么意义。非常感谢您的帮助
Sub sortone()
Application.ScreenUpdating = False
Dim Area As Range, sr As Long, er As Long
For Each Area In Range("A2", Range("E" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeConstants).Areas
With Area
sr = .Row
er = sr + .Rows.Count - 1
Range("A" & sr & ":E" & er).Sort key1:=Range("E" & sr), order1:=1
End With
Next Area
Application.ScreenUpdating = True
End Sub
非常感谢