VBA代码大全007:如何在vba中调用excel的排序功能?

在写vba项目时,经常会遇到需要对结果进行排序的情况。

 

如果是一维数组的排序,那么很多人可能还会去用一些排序的算法代码,但是如果要排序的数据是多维,或者是多行多列的单元格区域需要进行多个字段多条件的排序时,这时候为了效率,强烈推荐用内置的excel排序功能。

 

把多维数组先赋值到单元格区域中,然后用内置的excel排序功能进行排序,即节省了时间又减少了代码量。

 

如下图所示

 

sort1

 

如果要在vba中对A1:B7单元格区域按照销售额进行排序,这里提供一个模板代码,日后只需简单修改就可以应用到其它场景:

 

Sub 调用excel内置的排序功能()
    'QQ:1722187970,微信:xycgenius,公众号:水星excel
    Dim oWK As Worksheet
    Set oWK = Excel.Worksheets("Sheet1")
    Dim oSort As Sort
    Dim iRow As Long
    With oWK
        '获取要排序的区域的最后一个单元格所在的行号
        iRow = .Range("a65536").End(xlUp).Row
        Set oSort = .Sort
        With oSort
            '删除原来的排序字段
            .SortFields.Clear
            '添加新的排序字段,第一个关键字
            .SortFields.Add Key:=oWK.Range("a1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
            '添加新的排序字段,第二个关键字
            .SortFields.Add Key:=oWK.Range("b1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            '设置排序的单元格区域
            .SetRange oWK.Range("a1:b" & iRow)
            '设置排序的方法
            .SortMethod = xlPinYin
            '设置排序的方向
            .Orientation = xlSortColumns
            '设置是否包含列标题
            .Header = xlYes
            '开始排序
            .Apply
        End With
    End With
End Sub

在vba中调用excel的排序功能,主要是操作Sort对象,首先用SortFields.Clear清除所有的排序字段,然后再用SortFields.Add方法添加排序字段,也就是以哪个字段按照升序或者降序排序,然后用Sort.SetRange设置排序区域,最后用Sort.Apply应用排序。

       

发表评论