本文主要是介绍全民一起VBA实战篇 专题2 第五回 多键排序无非多次循环,独特功能还需独自开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相关知识点:
多关键字排序原理:现对次要的列排序,再排序优先的倒序(从最次要开始)进行依次排序,就能实现
Worksheets.Sort 工作表排序,自学
例1 足球赛积分表排序,四个排序列
本来的优先级是总积分、获胜次数、净胜球、进球数
实现排序就得倒序进球数、净胜球、获胜次数、总积分按照这个顺序排序,最关键的最后排
Sub demo2()
Dim r as range
Set r=range(“a3:e10”)
r.sort key1:=cells(1,5),order1:=xldescending
r.sort key1:=cells(1,4),order1:=xldescending
r.sort key1:=cells(1,3),order1:=xldescending
r.sort key1:=cells(1,2),order1:=xldescending
End Sub
简单重复,规则明确用程序优化一下:
Sub demo()
Dim r as range, k as long
Set r=range(“a3:e10”)
For k=5 to 2 step -1
r.sort key1:=cells(1,k),order1:=xlDescending
Next k
End Sub
例2 如果关键字不是顺序排列的用数组解决
Sub demo3()
Dim r as range, k as long, a()
a=arry(3,5,2,6)
Set r=range(“a3:f10”)
For k=3 to 0 step -1
r.sort key1:=cells(1,a(k)),order1:=xlDescending
Next k
End Sub
例3 已经按照GDP排序了,重新按照人均GDP进行排序(有隔行)
Sub sortbyaveGDP()
Dim i as long, j as long, k, r as range
For i =3 To 14
If Not cells(i,4).Mergecells Then ‘如果第i行是合并单元格,则不处理
For j=i+1 To 15
If Not cells(j,4).Mergecells Then ‘如果第j行是合并单元格,则不处理
If cells(j,4)>cells(i,4 ) Then\
‘以下代码交换i行和j行的三列数据,也可以使用循环结构对其简化
k=cells(i,2):cells(j,2)=cells(j,2):cells(j,2)=k
k=cells(i,3):cells(j,3)=cells(j,3):cells(j,3)=k
k=cells(i,4):cells(j,4)=cells(j,4):cells(j,4)=k
End If
End If
Next j
End If
Next i
End Sub
这篇关于全民一起VBA实战篇 专题2 第五回 多键排序无非多次循环,独特功能还需独自开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!