VBA(14)排序Sort

从一个录制的宏开始

Sub 宏1()

' 宏1 录制宏

    Range("A1:D20").Select

     '清除表1里所有排序条件

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear

    '新增排序条件:sort.sortfields.add

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A20") _

        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

        'SortOn = 按单元格的值.Order = 升序,DataOption = 默认,分别对数字跟文本进行排序

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20") _

        , SortOn:=xlSortOnCellColor, Order:=xlAscending, DataOption:=xlSortNormal

        'SortOn:=xlSortOnCellColor,按单元格的颜色

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C20") _

        , SortOn:=xlSortOnIcon, Order:=xlAscending, DataOption:=xlSortNormal

        'SortOn:= xlSortOnIcon按单元格图标

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(Range("D2:D20"), _

        xlSortOnFontColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 0, 0 _

        ) 'SortOn:=xlSortOnFontColor按字体颜色

    With ActiveWorkbook.Worksheets("Sheet1").Sort

        .SetRange Range("A1:D20")               ' 设置排序区域

        .Header = xlYes                         '是否带表头

        .MatchCase = False                      '区分大小写Ture/False

        .Orientation = xlTopToBottom    '排序方向xlTopToBottom从上到下/xlLeftToRight从左到右

        .SortMethod = xlPinYin          '按拼音排序/xlStroke按笔画排

        .Apply                          '执行排序

    End With

End Sub

排序官方说明:

Sort (Excel)

方法

  • Apply

    根据当前应用的排序状态对区域进行排序

    SetRange

    设置要排序的区域

属性

  • Application

    Creator

    Header

    指定第一行是否包含标题信息。 可读/写 XlYesNoGuess

    名称

    说明

    xlGuess

    0

    Excel 确定是否有标题,如果有,是否是一个。

    xlNo

    2

    默认值。 应对整个区域进行排序。

    xlYes

    1

    不应对整个区域进行排序。

    MatchCase

    设置区分大小写True区分/FALSE不区分

    Orientation

    名称

    说明

    xlSortColumns

    1

    按列排序。

    xlSortRows

    2

    按行排序。 这是默认值

    Parent

    返回上一级对象

    Rng

    SortFields

    方法:

    Add        创建新的排序字段

    Add2     创建新的排序字段(可使用自定义字段)

    Clear     清除所有 SortFields 对象

    属性:

    Count      排序规则个数

    Creator

    Item          索引返回一个SortFields 对象

    Parent      返回上一级对象

    SortMethod

    提定中文排序

    名称

    说明

    xlPinYin

    1

    按字符的汉语拼音顺序排序。 这是默认值。

    xlStroke

    2

    按每个字符的笔划数排序

创建测试数据:

Sub SortData() 
'创建测试数据 
Sub go2()
Dim x1 As Integer
Dim x2 As Integer
        Range("A1:d1") = Array("测试1", "测试2", "测试3", "测试4")
    For x1 = 1 To 4
        For x2 = 2 To 20
            Cells(x2, x1).Value = Int(Rnd() * 100)
        Next
    Next
End Sub

一、单元格快速排序

Sub sort1()		'单元格.sort排序
    With Worksheets("Sheet1").Range("a1:D20")
	.Sort key1:=Worksheets("Sheet1").Range("a1"), _
		key2:=Worksheets("Sheet1").Range("b1"), _
		key3:=Worksheets("Sheet1").Range("c1"), _
		order1:=xlAscending, _
		order2:=xlAscending, _
		order3:=xlAscending, _
			Header:=xlYes
    End With
End sub

'range("设置排序区域").Sort Key1:=排序1关键字,order1:=升/降序,Header:=是否有标题行

'单元格的Sort排序写法快速,但是最多指定3个key,遇到超过3个排序就需要多次写多一个排序。多条件排序还是套用Sheet.sort

二、Sheet.Sort排序

Sub sort2()
	With ActiveWorkbook.Worksheets("Sheet1")
		.Sort.SortFields.Clear '清空自定义排序的规则
		'增加4个key值
		.Sort.SortFields.Add Key:=.Range("a1"), SortOn:=xlSortOnValues, Order:=xlAscending
		.Sort.SortFields.Add Key:=.Range("b1"), SortOn:=xlSortOnValues, Order:=xlAscending
		.Sort.SortFields.Add Key:=.Range("c1"), SortOn:=xlSortOnValues, Order:=xlAscending
		.Sort.SortFields.Add Key:=.Range("d1"), SortOn:=xlSortOnValues, Order:=xlAscending
		'设置表格排序内容的范围
		 .Sort.SetRange Range("a1:d20")
		.Sort.Header = xlYes          '表头是否包含
		.Sort.Apply     '执行
	End With
End Sub

SortField 对象 (Excel)官方说明

方法

  • Delete

    排序规则删除

    ModifyKey

    表达式.ModifyKey (Key)

    修改字段中按其排序的键值。

    SetIcon

    表达式.SetIcon (图标)

    为 SortField 对象设置图标。

属性

  • Application

    Creator

    CustomOrder

    指定对字段进行排序的自定义次序。 读/写Variant。

    DataOption

    指定文本的排序方式。

    名称

    说明

    xlSortNormal

    0

    默认值。 分别对数字和文本数据进行排序。

    xlSortTextAsNumbers

    1

    将文本作为数字型数据进行排序。

    Key

    指定排序字段,该字段确定要排序的值。

    Order

    确定关键字所指定的值的排序次序。 读/写

    名称

    说明

    xlAscending

    1

    按升序对指定字段排序。 这是默认值。

    xlDescending

    2

    按降序对指定字段排序。

    xlManual

    -4135

    手动排序 (您可以拖动项目以重新排列) 。

    Parent

    返回上一级对象

    Priority

    指定排序字段的优先级

    SortOn

    指定数据的排序参数。

    名称

    说明

    SortOnCellColor

    1

    单元格颜色。

    SortOnFontColor

    2

    字体颜色。

    SortOnIcon

    3

    图标。

    SortOnValues

    0

    值。

    SortOnValue

    指定类型进行排序

来自 <SortField 对象 (Excel) | Microsoft Docs>

三、添加自定义序列排序

Sub Sort3()
Dim Count1 As Integer
Dim rng As Range
Dim arr
n = Application.InputBox("装入方式", , 1, , , , , 1)        '选择1或2自定义序列创建方式
    Select Case n
        Case Is = 1
        Set rng = Range("d2:d" & Range("d65536").End(xlUp).Row)
        Application.AddCustomList (rng)        '表格直接创建自定义序列
        Case Is = 2
        arr = Range("d2:d" & Range("d65536").End(xlUp).Row).Value
        Application.AddCustomList (arr)        '也可以数组创建自定义序列
        Case Else
        MsgBox "未选择"
        Exit Sub
    End Select
'Application.AddCustomList
'为自定义自动填充和/或自定义排序添加自定义列表,该参数除了支持单元格对象,也支持数组
    Count1 = Application.CustomListCount
'自定义序列的数目
    Range("a:a").Sort key1:=[a1], order1:=xlAscending, Header:=xlYes, ordercustom:=Count1 + 1
'使用自定义排序,ordercustom指定使用哪个自定义序列排序。Count1 为默认自定义个数,+1即用最新的自定义排序
    Application.DeleteCustomList Count1
'删除新增的自定义序列
End Sub

 效果图:

 

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VBA中的Sort方法可以用于对数组进行排序。对于自定义排序,您需要使用Compare参数,并编写一个函数来执行自定义比较操作。 下面是一个示例代码,演示如何使用VBA进行自定义排序: ```vb Sub CustomSort() Dim arr(1 To 5) As String Dim i As Integer arr(1) = "apple" arr(2) = "orange" arr(3) = "banana" arr(4) = "grape" arr(5) = "peach" '调用Sort方法,并传递自定义比较函数 Call VBA.Sort(arr, AddressOf Compare) '输出排序结果 For i = 1 To 5 Debug.Print arr(i) Next i End Sub Function Compare(ByVal a As String, ByVal b As String) As Integer '自定义比较函数 '如果a小于b,则返回-1 '如果a等于b,则返回0 '如果a大于b,则返回1 Select Case a Case "banana" Select Case b Case "banana" Compare = 0 Case "orange", "apple" Compare = -1 Case Else Compare = 1 End Select Case "apple" Select Case b Case "apple" Compare = 0 Case Else Compare = -1 End Select Case "orange" Select Case b Case "orange" Compare = 0 Case Else Compare = 1 End Select Case "grape" Select Case b Case "grape" Compare = 0 Case "peach" Compare = -1 Case Else Compare = 1 End Select Case "peach" Select Case b Case "peach" Compare = 0 Case Else Compare = 1 End Select End Select End Function ``` 在上面的代码中,我们定义了一个自定义比较函数Compare,该函数接受两个字符串参数a和b,并返回一个整数值,用于指示a与b的大小关系。然后,我们定义了一个字符串数组arr,并使用Sort方法对其进行排序,同时传递了自定义比较函数Compare。最后,我们遍历排序后的数组,并输出结果。 请注意,上面的示例中的自定义比较函数Compare只是一个示例,您可以根据自己的需求编写不同的比较函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值