小米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文件


分享到:


相關文章: