vba排序循环需要排名

时间:2018-03-11 12:20:02

标签: vba loops sorting rank

我有一个电子表格,每周都有学生考试成绩。它有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                 
非常感谢

3 个答案:

答案 0 :(得分:1)

" RankIf"使用SUMPRODUCT

按子集进行条件排名

另一种排名方式,如果有RANKIF函数,就会使用SUMPRODUCT来执行条件排名:

rankif

D5中的公式:

=1+SUMPRODUCT((A$4:A$21=A5)*($B$4:$B$21>B5))            

...设置绝对/相对单元格引用以允许复制或填充公式&右。

更多信息:

答案 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