小米AI申請專利排11,談談排序-sort方法

小米CEO雷軍轉發小米集團副總裁、小米技術委員會主席崔寶秋的微博時表示,小米在AI領域申請專利684項,全球排在第11位。

小米AI申請專利排11,談談排序-sort方法

藉助此事,聊一下VBA代碼裡面的sort方法排序,VBA其實有多種排序的方法,之前的文章也採用過冒泡的排序法,但是在Excel裡面直接調用Range對象的sort的排序方式,是最快的排序。

sort排序其是執行的是Excel自帶的排序功能:

小米AI申請專利排11,談談排序-sort方法

小米AI申請專利排11,談談排序-sort方法

把AI專利排行榜的數據打亂一下:

小米AI申請專利排11,談談排序-sort方法

用VBA代碼運行一下:

小米AI申請專利排11,談談排序-sort方法

代碼只有簡單的2行:

Sub paixu()
 Dim nRow%
 nRow = Sheets("sheet2").Cells(Rows.Count, 2).End(3).Row
 '排序代碼
 Range("a3:b" & nRow).Sort key1:=Range("b2"), order1:=xlDescending
 
End Sub

sort方法,在Excel 2007版本之後增加的新功能,其語法為:

Range對象.Sort(Key1,Order1 As XlSortOrder, _
Key2,Type,Order2As XlSortOrder, _
Key3,Order3As XlSortOrder, _
HeaderAs XlYesNoGuess, _
OrderCustom,MatchCase,_
OrientationAs XlSortOrientation, _
SortMethodAs XlSortMethod, _
DataOption1As XlSortDataOption, _
DataOption2As XlSortDataOption, _
DataOption3As XlSortDataOption)

除了Range對象是必須之外,內部的參數都是可選的。

其中各類型參數的意義如下: ① key1、key2、key3 這些key是排序的關鍵列(或行)的單元格地址,如 Range("A1") 實際只要選對列標題即可,對行數要求不敏感。

【行數要求不敏感】 即數據區域中任意行數都可以: Range("A1")、或Range("A2")、或Range("A1000")都可以。

【注意】

一次Sort只能調用至多3個參數,沒有key4可以使用。

至少使用1個參數即可,即key2、key3可以省去不用。

【引用方法】

帶參數名引用,如: key1:=Range("G3") 帶參數名引用時

參數位置引用,即按照上述Sort命令的參數順序直接應用, 如: Range("A1:I19").Sort key1:=Range("G3") 即第1位置參數即為key1

② Order1、Order2、Order3 這些Order是排序的順序模式指定參數。即: A-Z升序、或Z-A降序 參數的模式名稱為: A-Z升序= xlAscending 或直接=1 Z-A降序= xlDescending 或直接=2

帶參數名引用時: Order1:=xlAscending 或 Order1:= 1

參數位置引用時,緊跟key後面。(但注意key2和Order2之間要隔一個Type參數)

③ Header 即是否有標題行參數,一共有3個值: Header:= xlGuess=0 或xlYes=1 或 xlNo=2 即=xlGuess、或=0時,工作表自己判斷 =xlYes、或=1時,強制第1行為列標題,即第1行【不參與排序】 =xlNo、或=2時,強制沒有列標題。即第1行【也參與排序】

帶參數名引用時: 如: Header:= xlGuess

參數位置引用時,在第7個逗號之後。 (如果key只有1個時,要連續空6個逗號, 如:Range("A1:I19").Sort Range("A1"), 1, , , , , , 2 (order1之後連續寫6個逗號)

④ MatchCase 是否匹配大小寫 MatchCase:=False 、或=0 不區分大小寫 MatchCase:=True 、或=1 區分大小寫(Case Sensitive)

⑤ Orientation 排序方向 一般為同一列中從上到下各行進行排序:Orientation:= xlTopToBottom 、或=1 如果是: 同一行中從左到右各列進行排序,則為:Orientation:= xlLeftToRight、或=2

⑥ SortMethod 排序方法 按拼音排序: SortMethod:= xlPinYin 、或=1 (Use phonetic info) 按筆畫排序: SortMethod:= xlStroke、或=2

⑦ DataOption1 按數值或按文本排序 DataOption1:= xlSortNormal

需要注意的是sort函數只有三個key,即key1,key2,key3所以排序條件在三個以內,可以調用sort方法。查過三個,需要使用for循環來遍歷了。

Sub SortTest()
 key = Array(1, 2, 4, 7, 6, 9) '事先指定排序順序
 Order = Array(1, 2, 2, 1, 2, 1) '指定各個排序key參數對應的A-Z或Z-A順序(=1或=2)
 With Range("D12:M200") '對於排序區域
 For i = UBound(key) To 0 Step -1 '循環排序操作時要倒序進行
 .Sort .Offset(, key(i) - 1), Order(i), , , , , , xlNo
 Next
 End With
End Sub

小結:

本篇的做重點主要是對sort方法的解析,事例並不多。可以看我之前的文章。

延伸閱讀:

Excel VBA 求數據1-33數字出現次數並排序

Excel VBA 多條件排序

Excel VBA 跨表查詢、彙總、排序

點擊關注可以更方便的查看Excel VBA的案例文章

私信 視頻 可以獲取54集VBA入門視頻

私信 VBA或 vba 可以獲取文章中含VBA代碼的Excle文件


分享到:


相關文章: