注释:********************************************** 注释:宏名:qksort() 注释:功能:本宏的作用为对选定区域的数值按降序排名次。 注释:使用:用鼠标选择一列需排名次的数值,执行【工具/宏/宏/执行】 注释:命令运行本宏,则该列的右一列数值即显注释:示该列名次结果 注释:本宏命令的录入:执行【工具/宏/宏/创建】命令既可。 注释:********************************************* Option Base 0 Sub qksort() Dim rnum As Integer 注释:rnum定义需排名的数的个数 rnum = Selection.Rows.Count ReDim a(rnum) As Integer, b(rnum) As Long, c(rnum) As Integer 注释:a(rnum)保存数的下标位序,b(rnum)保存需排名次的数值项
For i = 0 To rnum - 1 a(i) = i + 1 b(i) = Selection.Rows.Cells(i + 1) c(i) = i + 1 Next i 注释:b(i)中为要排序的数值,a(i)中为下标位序
For k = rnum - 1 To 0 Step -1 kmax = 0 For j = 1 To k If b(kmax) > b(j) Then temp = b(kmax) b(kmax) = b(j) b(j) = temp temp = a(kmax) a(kmax) = a(j) a(j) = temp End If kmax = j Next j Next k 注释:利用冒泡排序法将数值(b())及其下标位置(a())进行排序
i = 1 c(a(rnum - 1) - 1) = i For k = 1 To rnum - 1 If b(rnum - 1 - k) < > b(rnum - k) Then i = i + 1 c(a(rnum - 1 - k) - 1) = i Else c(a(rnum - 1 - k) - 1) = i End If Next k 注释:排出名次,并将名次放入c()数组中
For k = 0 To rnum - 1 Selection.Rows.Cells(k + 1, 2) = c(k) Next k 注释:将c()数组中的名次依次写入选择区域的右列,完成排名