您的位置: 首页 > 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....
相关知识:

下面内容对您也许有用

      话题:如何启用excel中用VBA自定义的函数公式
      问:新建一个2007Excel工作表,在VBA中是ThisWorkbook中输入以下代码,关闭并切换到
      答:什么叫做vba自定义的函数公式?你是想说:如何进入vba代码编辑窗口吗?不要把代码放在表格的代码里,插入一个新模块,代码放在模块里 用VBA在excel中插入函数公式 Excel 公式 函数 VBA
      话题:在EXCEL中用VBA来自定义函数的问题
      如何自定义这么一个函数:比如一个人在2001年4月23日参加工作,到2008年4 月22日,他的工龄还是六年,到2008年4月23日,他的工龄就是七年了,我所说的工龄是整整经历的整年数(周年),比如参加工作的
      话题:EXCEL中用VBA得到的值赋予某自定义名称!求助
      问:例如:在Sheet1中我想把当前光标位置的行号和列号分别赋予自定义名称“行号”
      答:Private Sub Worksheet_SelectionChange(ByVal Target As Range)Sheet1.Names.Add"行号",Target.Row Sheet1.Names.Add"列号",Target.Column End Sub 不知道 Excel中,用VBA能不能调用到 请大家帮助用excel VBA编写一个
      话题:请问如何在excel中用vba自定义单元格格式,如输入数字5“,
      答:Private Sub Worksheet_Change(ByVal Target As Range)Target.NumberFormatLocal="#""元"""End Sub 这个是工作表事件,输入完之后自动变更单位为"元 excel中如何用VBA判断一个单元格 EXCEL VBA 取出某一单元格里文本
      话题:求会计函数高手(在EXCEL中用VBA自定义一个大写金额转换的函数,
      问:求会计函数高手(在EXCEL中用VBA自定义一个大写金额转换的函数,例如:1560890 转
      答:(IF(E10=0,"",IF(TRUNC(E10)=0,"",NUMBERSTRING(TRUNC(E10),2)&"元"&IF(OR(CEILING(REPLACEB(RIGHT(FIXED(E10,2),4),2,1,"")/99,1)=1,CEILING(RIGHT(FIXED(E10,2 excelvba用function自定义 excel中怎样将数值转换为金额
      话题:在excel中用VB进行排序的问题
      问:有没有懂VB的啊?在EXCEL中实现排序功能,有的话加下Q一三五九六七四六三四。我
      答:方法一是利用工具~宏~录制宏,然后把排序操作手动完成一遍,然后停止录制,按ALT+F11就可以查看到代码。第二种方法,直接写代码,按ALT+F11打开VBE窗口,然后 excel中用 VB编写排序 vb判断excel排序问题
      话题:如何在excel中用VBA代码实现有条件的累加,变量是数组的,循环
      如何在excel中用VBA代码实现有条件的累加,变量是数组的,循环结束后一次性将结果返回到表里假设表1从A2到A102有101行数据Sub mypro()Dim arrA(100)As Single rem 定义数组arrA 来储存A列的数据
      话题:EXCEL中用VBA编写自动流水号
      问:在EXCEL中如何用VBA编写流水号,要求第次打开表格自动增加1?还可以自定义流水号
      答:假设流水号保存在Sheet1工作表的A1单元格 把下面的代码添加到文件的THISWORKBOOK模块 Private Sub Workbook_Open()Sheets("Sheet1").Range("A1").Value=Sheets( 对EXCEL表格自动编流水号 在Excel中用VBA编写一个程序
      话题:Excel VBA自定义函数
      问:在excel中,用VBA自定义了一些函数,但如何能够做到像内嵌的函数那样,输入“=
      答:可以实现,但是很麻烦,我也没具体看,估计看了也不会 : club.excelhome./viewthread.php?tid=252256&replyID=&skin=0 Excel中怎样自定义函数 Excel VBA自定义函数求和?
      话题:在excel中用vba实现与sql数据库的数据比较
      问:我想将excel中,一个字段中的数据与sql中某个表中的某个字段中的数据进行比较,
      答:先建立一个sheet通过数据页签中自其它来源,将数据库中的资料导入。然后再建立一个sheet通过数据页签中的现有连接,然后通过sql语句就可以比较那两个sheet中的 Excel VBA 连接SQL数据库后的 用VBA语言调用sql数据库数据到
最新评论