vba排序函数sort用法(如何用VBA对某列进行排序)

本文目录
如何用VBA对某列进行排序
以下是某列进行排序的示例代码,从参考:
Sub SortData()
’添加示例数据
Range("A1").Value = "Name"
Range("A2").Value = "Bill"
Range("A3").Value = "Rod"
Range("A4").Value = "John"
Range("A5").Value = "Paddy"
Range("A6").Value = "Kelly"
Range("A7").Value = "William"
Range("A8").Value = "Janet"
Range("A9").Value = "Florence"
Range("A10").Value = "Albert"
Range("A11").Value = "Mary"
’选择排序列中的某个单元格.
Range("A2").Select
’开始排序
With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:A11"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:A11")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
MsgBox "Sort complete.", vbInformation
End Sub
vba 快速排序法 取前n条
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
中文名
快速排序算法
外文名
quick sort
别名
快速排序
提出者
C. A. R. Hoare
提出时间
1960年
快速
导航
排序步骤程序调用举例示例代码性能分析
排序流程
快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。[
VBA 数组排序
最简单的排序,须借助excel的函数:
Sub SmallSort()
Dim a(-1 To 3), i, b()
For i = LBound(a) To UBound(a)
a(i) = Int(Rnd * 10) ’赋值给a()
Next
Rows("5:6").Delete
.Resize(1, UBound(a) - LBound(a) + 1) = a
’下面是排序方法,结果放在b()内
ReDim b(1 To UBound(a) - LBound(a) + 1)
For i = 1 To UBound(b)
b(i) = Application.WorksheetFunction.Small(a, i) ’Small为从小到大,large为从大到小
Next
.Resize(1, UBound(b)) = b
End Sub
求教vba的range.sort方法,需要根据三个字段依次排序,怎么写
先用.SortFields.Clear删除排序字段,然后依次添加多个.SortFields.Add排序关键字即可,下面的例子代码在EXCEL2010上执行的:
Sub YgB()
ActiveWorkbook.Worksheets("标保明细").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("标保明细").Sort.SortFields.Add key:=Range("A2:A3339")
ActiveWorkbook.Worksheets("标保明细").Sort.SortFields.Add key:=Range("B2:B3339")
ActiveWorkbook.Worksheets("标保明细").Sort.SortFields.Add key:=Range("C2:C3339")
With ActiveWorkbook.Worksheets("标保明细").Sort
.SetRange Range("A1:Y3339")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
excel vba 按日期排序
1、假如你要排序的工作表在sheet1,假如你的日期列在J,可以用以下代码: ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key:=Range("J3:J65535" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range("A2:AL65535")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
2、后续如果有这种常用功能的VBA你可以选择录制宏,然后做一下,录制完看下VB器的代码,稍作修改即可得到你想要的代码。
3、你想要大一点的区域,只要将range的区域改大就可以了。
ExcelVBA怎么排序
假设你的工作表名为“表”,采用如下代码
Sub 排序()
With ActiveWorkbook.Worksheets("表").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal ’降序排列
.SetRange Worksheets("表").Range("A2:C13")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
升序为Order:=xlAscending

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40




