从一个录制的宏开始
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
效果图:
文章来源:https://www.toymoban.com/news/detail-440072.html
文章来源地址https://www.toymoban.com/news/detail-440072.html
到了这里,关于VBA(14)排序Sort的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!