VBA|多關鍵字排序
1 Range對象的Sort方法
使用Range對象的Sort方法對區域進行排序時,同時最多只能指定3個關鍵字,當需要超過3個關鍵字對區域進行排序時,可以通過執行多次Sort方法來實現。需要注意的是在排序時應按照各關鍵字的倒序順序,例如,如果需要按A→B→C→D的關鍵字順序進行排序,則應按D→C→B→A的順序執行Sort方法。
如有以下工作表數據:
姓名 | 基礎知識 | 教育學 | 心理學 | 教育教學技能 | 教育法規 | 總成績 |
同學1 | 27 | 22 | 21 | 26 | 23 | 119 |
同學10 | 23 | 30 | 47 | 32 | 26 | 158 |
同學11 | 25 | 48 | 48 | 36 | 34 | 191 |
同學14 | 23 | 47 | 44 | 36 | 54 | 204 |
同學15 | 41 | 30 | 32 | 54 | 34 | 191 |
同學16 | 24 | 39 | 36 | 33 | 33 | 165 |
同學4 | 33 | 29 | 32 | 23 | 23 | 140 |
同學5 | 41 | 47 | 24 | 43 | 36 | 191 |
同學6 | 31 | 38 | 47 | 25 | 26 | 167 |
同學7 | 21 | 27 | 42 | 43 | 29 | 162 |
需要'按"總成績"、"基礎知識"、"心理學"、"教育學"排序:
Advertisements
Sub sortByKeys()
With Me.Range("A1")
.Sort key1:="教育學", order1:=xlDescending, _
key2:="心理學", order2:=xlDescending, Header:=xlYes
.Sort key1:="總成績", order1:=xlDescending, _
key2:="基礎知識", order2:=xlDescending, Header:=xlYes
End With
End Sub
代碼運行效果:
姓名 | 基礎知識 | 教育學 | 心理學 | 教育教學技能 | 教育法規 | 總成績 |
同學14 | 23 | 47 | 44 | 36 | 54 | 204 |
同學5 | 41 | 47 | 24 | 43 | 36 | 191 |
同學15 | 41 | 30 | 32 | 54 | 34 | 191 |
同學11 | 25 | 48 | 48 | 36 | 34 | 191 |
同學6 | 31 | 38 | 47 | 25 | 26 | 167 |
同學16 | 24 | 39 | 36 | 33 | 33 | 165 |
同學7 | 21 | 27 | 42 | 43 | 29 | 162 |
同學10 | 23 | 30 | 47 | 32 | 26 | 158 |
同學4 | 33 | 29 | 32 | 23 | 23 | 140 |
同學1 | 27 | 22 | 21 | 26 | 23 | 119 |
上述代碼運行后,對應的「排序」對話框(數據→排序):
Advertisements
2 Worksheet對象的Sort方法
Sub MoreKeySort()
With ActiveSheet.Sort.SortFields
.Clear
.Add Key:=Range("G1"), SortOn:=xlSortOnValues,Order:=xlDescending
.Add Key:=Range("B1"), SortOn:=xlSortOnValues,Order:=xlAscending
.Add Key:=Range("C1"), SortOn:=xlSortOnValues,Order:=xlDescending
.Add Key:=Range("D1"), SortOn:=xlSortOnValues,Order:=xlDescending
End With
With ActiveSheet.Sort
.SetRange Me.Range("A1").CurrentRegion '指定排序區域
.Header = xlYes '指定排序區域包含標題
.Apply '應用工作表排序
End With
End Sub
代碼運行效果:
姓名 | 基礎知識 | 教育學 | 心理學 | 教育教學技能 | 教育法規 | 總成績 |
同學14 | 23 | 47 | 44 | 36 | 54 | 204 |
同學11 | 25 | 48 | 48 | 36 | 34 | 191 |
同學5 | 41 | 47 | 24 | 43 | 36 | 191 |
同學15 | 41 | 30 | 32 | 54 | 34 | 191 |
同學6 | 31 | 38 | 47 | 25 | 26 | 167 |
同學16 | 24 | 39 | 36 | 33 | 33 | 165 |
同學7 | 21 | 27 | 42 | 43 | 29 | 162 |
同學10 | 23 | 30 | 47 | 32 | 26 | 158 |
同學4 | 33 | 29 | 32 | 23 | 23 | 140 |
同學1 | 27 | 22 | 21 | 26 | 23 | 119 |
上述代碼運行后,對應的「排序」對話框(數據→排序):