您的位置: 首页 > EXCEL技巧 > ExcelVBA >

在Excel中用VBA进行自定义排序

时间:2014-10-12 整理:docExcel.net

Excel中默认的排序方法是按照字母或拼音顺序排序的,如果要使用Excel内置的自定义序列或自己添加的自定义序列排序,可参考本站其他文章。本文介绍一下用VBA来实现自定义排序的方法。

一、用工作簿内其他工作表中的序列进行自定义排序

假如在Book1.xls工作簿的Sheet1表中有如图所示的工资表,现在需要将“姓名”列按Sheet3表B3:B12中的序列排序。

在模块中插入下列代码:

Sub CustomSort1()
     '用指定列中的序列自定义排序
     Dim n As Integer
     n = Application.CustomListCount
     Application.AddCustomList (Worksheets("Sheet3").Range("b3:b12"))
     Range("b3:g12").Sort key1:=Range("b2"), order1:=xlAscending, OrderCustom:=n + 2
     Application.DeleteCustomList n + 1
   End Sub

说明:

1. Application.CustomListCount属性返回工作簿中所有自定义序列的数量。从下图的“自定义序列”对话框中可以看到,Excel默认已内置了11个自定义序列。在用户没有添加自定义序列的情况下,Application.CustomListCount的值为11。

n = Application.CustomListCount语句在排序前先取得自定义列表中的自定义序列数量。

2.  Range.Sort 方法中包含参数“OrderCustom”表明进行自定义排序,同时“OrderCustom”参数的值指明用哪个自定义序列排序。从Excel 2003的“排序选项”对话框中可以看出,默认的排序方法为“普通”,当省略OrderCustom参数或指定其值为1时,则按“普通”(即非自定义序列)方法排序。当使用自定义排序时,将“OrderCustom”参数设置为指定的序列在自定义列表中的顺序加1即可。如自定义序列“一月,二月……,十二月”在下图中的位置为8,如果要用该自定义序列排序,则需指定OrderCustom的值为8。

本例中OrderCustom:=n + 2即OrderCustom:=13(n=11)表示用新增的自定义序列排序。

3. Application.DeleteCustomList(ListNum)方法删除自定义序列,ListNum指定所删除的自定义序列在自定义序列列表中的位置(不包含“普通”)。本例中新增的自定义序列在自定义列表中处于第12位,由于n=11,Application.DeleteCustomList n + 1将删除新增的自定义序列。

二、用数组中的序列自定义排序

下面的代码直接将自定义序列放置在数组中,用Application.AddCustomList 方法添加到自定义列表。

Sub CustomSort2()
     '用数组中的序列自定义排序
     Application.AddCustomList ListArray:=Array("张梅", "黄中", "李秋霞", "应军军", "孙萍", "刘梅波", "李菲", "吴燕", "艾筱竹", "王佳")
     Range("b3:g12").Sort key1:=Range("b2"), order1:=xlAscending, OrderCustom:=Application.CustomListCount + 1
     Application.DeleteCustomList Application.CustomListCount
   End Sub

三、用其他工作簿中的某列数据进行自定义排序

将“ 姓名”列按照同一文件夹中Book2.xls工作簿的"Sheet1"中B3:B12区域中的序列自定义排序。

Sub CustomSort3()
    '用其他工作簿中的某列数据自定义排序
    Dim wbk As Workbook
    Dim n As Integer
    Dim Arr As Variant
    Application.ScreenUpdating = False
    n = Application.CustomListCount
    Set wbk = GetObject(ThisWorkbook.Path & "\" & "Book2.xls")
    Arr = wbk.Worksheets("Sheet1").Range("b3:b12").Value
    wbk.Close False
    Set wbk = Nothing
    Application.AddCustomList ListArray:=Arr
    Range("b3:g12").Sort key1:=Range("b2"), order1:=xlAscending, OrderCustom:=n + 2
    Application.DeleteCustomList n + 1
    Application.ScreenUpdating = True
   End Sub

四、用内置的自定义序列排序

对指定的数据用自定义序列“一月,二月……,十二月”排序:

Sub CustomSort4()
     '用内置的自定义序列排序
     Range("B21:C32").Sort key1:=Range("b1"), order1:=xlAscending, OrderCustom:=8
   End Sub

玩转Excel数据02:自定义排序 问题:玩转Excel数据02:自定义排序
回答:Excel中内置了对文本进行笔划排序和字母排序共两种方式,假设我们只是想要将相同类别的数据放到一起,然后按自己定义的某种依据进行排序,那么问题来了,怎么样打破Excel默认对文本进行的排序方法呢? 其实我们是可以使...
Word表格制作全套教程 共22课GIF动画演示 问题:Word表格制作全套教程 共22课GIF动画演示
回答:...、菜单栏绘制表格 Word2003中自己手工绘制表格技巧 Word中用+、-加减号也可以绘制表格 Word中复制、剪切和粘贴表格 Word中移动和复制表格技巧 Word表格怎么添加和删除某行和某列 Word中设置表格的边框线样式和颜色 Word表格中...
在Excel2013中按照自定义序列排序 问题:在Excel2013中按照自定义序列排序
回答:众所周知,Excel2013是自带了排序功能的,不管你需要排序的是字母、数字还是文本,它都有它自己的一套排序方法。但如果很不巧的,我们的需要按照自定义的文本序列来给Excel表格排序,我们又该怎么办呢? 具体做法是这样...
Excel表格怎样自动排序号 问题:Excel表格怎样自动排序号
回答:...A4单元格起A列其他单元格。 参考回答: 一、Excel自定义排序 设定自己需求的排序方法; 现在我有一张表,有“日期”和“地点”,我希望将“地点”按照我的方式如:北京、上海、天津、广州,这样来排序;(如)地点排序...
53、Excel2003视频教程:自定义排序的设置 问题:53、Excel2003视频教程:自定义排序的设置
回答:
在PowerPoint2007中用日历展示需要待办的事项 问题:在PowerPoint2007中用日历展示需要待办的事项
回答:俗话说的好,好记性不如烂笔头,事实也确实如此,在好的记性都不如用笔牢牢记在本子上。在PowerPoint2007中,我们可以制作一个动态的日历待办事项,让当天需要做的事情,呈现在自己的眼前,不遗漏任何一项。 实例演示 1....
相关推荐: