我有一个电子表格,每周都有学生考试成绩。它有5个字段,名称(A栏),年份(B栏),等级(C栏),周(栏目D)和得分(ColE)。每个学生在工作表上有自己的块,每个行块都是空行和空行。行块的大小会有所不同。(请参见下文)。
我有一些代码可以将分数(E列)从最高到最低排序(参见排序前和排序后)
我想要做的是在周列和分数列之间插入另一列,该列给出排序后每个分数的位置,它将显示在下面的图3中。我认为它需要某种类型的RANK程序和循环。另外有时学生在某些星期的分数可能相同,因此会有一个联合顶部(或第二或第三等)与约翰埃利斯联合第4和两组54和phil simm谁有第1和第4联合。
希望这是有道理的。任何帮助都非常赞赏
在底部的遗传图中我还放置了用于循环的代码,并将列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
所以位置栏反映了排序后得分的新位置 如果两个分数是相同的,那么这将是一个联合位置,就像约翰埃利斯联合第四,两组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
非常感谢
答案 0 :(得分:1)
SUMPRODUCT
:另一种排名方式,如果有RANKIF
函数,就会使用SUMPRODUCT
来执行条件排名:
D5
中的公式:
=1+SUMPRODUCT((A$4:A$21=A5)*($B$4:$B$21>B5))
...设置绝对/相对单元格引用以允许复制或填充公式&右。
Office.com:SUMPRODUCT Function (Excel)
Office.com:RANK Function (Excel)
Office.com:Excel statistical functions: Representing ties by using RANK
答案 1 :(得分:0)
你可以试试这段代码
str_trim
答案 2 :(得分:0)
name year level week position score
john ellis 3 4 13 1 29
phil simm 4 6 12 2 41
phil simm 4 6 13 2 41
john ellis 3 4 10 4 45
jill evans 5 2 11 5 49
john ellis 3 4 11 6 54
john ellis 3 4 12 6 54
jill evans 5 2 10 8 56
phil simm 4 6 14 8 56
phil simm 4 6 15 10 59
phil simm 4 6 16 11 61
phil simm 4 6 17 11 61
john ellis 3 4 14 13 66
phil simm 4 6 11 14 76
jill evans 5 2 12 15 77
jill evans 5 2 13 16 84
phil simm 4 6 10 17 89
empty empty empty empty #VALUE! empty
empty empty empty empty #VALUE! empty