目录

示例:

实现代码

单元格对象的Sort方法

添加和删除自定义序列CustomList

使用自定义序列排序

实现代码2

Sort对象

排序字段SortField

按颜色排序

设置排序区域SetRange方法


示例:

如图所示,该表为某医院医务人员一览表。现在希望能够将该表数据以C列(科室)按照“外妇科l手术室l内儿科l西医科l中医科l耳鼻喉科I放射科l检验科l超室|口腔科l针灸科I西药房l中药房l收费室J疾控科l合管办|后勤科”的依次顺序进行排序,如何利用VBA实
现?

序号 姓名 科室 级别 身份 职称 受聘专业 参工时间 工作年限 入院时间 入院年限 职务
1 张1张 后勤科 中级 干部 主治医师 医生 1970/9/1 40 1970/7/1 40  
2 李2李 外妇科 中级 干部 主治医师 医生 1991/8/1 19 2008/10/1 2 院长.书记
3 江3江 外妇科   工人   医生 1993/9/1 17 1999/1/1 12  
4 陈4陈 外妇科 初级 干部 医士 医生 1999/10/1 11 1999/10/1 11 医务科长
5 周5周 外妇科   合同   医生 2009/2/13 2 2009/2/13 2  
6 吴6吴 外妇科 中级 干部 主治医师 医生 1977/2/1 34 1977/7/1 33 副院长
7 张7张 外妇科 中级 干部 主治医师 医生 1978/4/1 33 1985/1/1 26  
8 李8李 外妇科 初级 干部 护师 护士 1987/2/1 24 1989/3/1 22  
9 江9江 外妇科   合同   护士 2007/4/26 4 2008/4/1 3  
10 陈10陈 外妇科   干部   护士 2000/8/1 10 1999/5/1 12  
11 周11周 外妇科 初级 干部 护士 护士 2007/6/6 4 2007/6/1 4  
12 吴12吴 外妇科   干部   医生 2006/3/1 5 2006/4/1 5  
13 张13张 外妇科   合同   医生 2009/5/7 2 2009/5/7 2  
14 李14李 外妇科   合同   护士 2009/9/9 1 2009/9/9 1  
15 江15江 手术室   干部   医生          
16 陈16陈 手术室   合同   医生 2009/7/11 1 2009/6/11 2  
17 周17周 手术室 初级 干部 医师 护士 1981/12/1 29 1981/12/1 29 护士长
18 吴18吴 内儿科 初级 干部 主治医师 医生 1988/8/1 22 1988/7/1 22 医务科副科长兼中医科科长
19 张19张 内儿科 初级 干部 主治医师 医生 1997/10/1 13 1997/10/1 13 内科主任
20 李20李 内儿科   干部   医生 2000/8/1 10 2008/8/1 2  
21 江21江 内儿科 初级 干部 护师 护士 1981/12/1 29 2006/10/1 4  
22 陈22陈 内儿科 初级 干部 护士 护士 2000/12/1 10 2002/1/1 9  
23 周23周 内儿科   合同 护士 护士 2007/11/14 3 2007/11/1 3  
24 吴24吴 内儿科   干部   医生 2009/2/10 2 2009/2/10 2  
25 张25张 内儿科   干部   护士 2009/5/18 2 2009/5/19 2  
26 李26李 内儿科   合同   护士 2009/9/12 1 2009/9/12 1  
27 江27江 内儿科   合同   护士 2009/5/18 2 2009/5/19 2  
28 陈28陈 内儿科   合同   护士 2009/5/18 2 2009/5/19 2  
29 周29周 西医科 中级 干部 主治医师 医生 1972/3/1 39 1986/1/1 25 工会主席
30 吴30吴 西医科 中级 干部 主治医师 医生 1984/7/1 26 1986/1/1 25  
31 张31张 中医科 初级 干部 医师 医生 2009/2/1 2 2009/4/11 2  
32 李32李 耳鼻喉科   合同   医生          
33 江33江 放射科 中级 干部 主治医师 医生 1979/3/1 32 1989/12/1 21  
34 陈34陈 放射科 初级 干部 医师 医生 1990/1/1 21 1992/8/1 18 门诊部主任
35 周35周 放射科 初级 干部 医士 医生 1997/9/1 13 2009/3/21 2  
36 吴36吴 检验科   干部   医生 1992/6/1 19 1992/5/1 19  
37 张37张 检验科   干部   医生     2010/4/12 1  
38 李38李 B超室   工人   医生 2000/8/1 10 1999/5/1 12  
39 江39江 B超室   干部   医生     2010/4/12 1  
40 陈40陈 口腔科 初级 干部 医师 医生 1999/7/1 11 2001/1/1 10  
41 周41周 口腔科 中级 干部 主治医师 医生 1993/7/1 17 1993/1/1 18  
42 吴42吴 针灸科 初级 干部 医师 医生 1998/9/1 12 1999/2/1 12  
43 张43张 西药房 初级 干部 医士 药剂 1993/12/1 17 1993/12/1 17  
44 李44李 西药房 初级 干部 药剂师 药剂 1985/10/1 25 1987/9/1 23  
45 江45江 西药房 初级 干部 医师 药剂 1997/1/1 14 1997/10/1 13  
46 陈46陈 西药房 初级 干部 医士 药剂 1998/12/1 12 2006/1/1 5  
47 周47周 中药房 初级 干部 医士 药剂 1993/12/1 17 1993/12/1 17  
48 吴48吴 收费室   合同   收费员     2011/4/1 0  
49 张49张 收费室   合同   收费员 2006/1/1 5 2006/1/1 5  
50 李50李 收费室   合同   收费员 2008/3/1 3 2008/3/1 3  
51 江51江 收费室 初级 干部 医士 收费员 1988/10/1 22 2007/11/1 3  
52 陈52陈 疾控科 中级 干部 主治医师 医生 1977/4/1 34 1977/4/1 34  
53 周53周 疾控科 初级 干部 医士 医生 1989/12/1 21 1989/1/1 22 预防保健科
科长
54 吴54吴 疾控科 初级 干部 医师 医生 1979/7/1 31 2003/1/1 8  
55 张55张 疾控科 初级 干部 医士 医生 1990/3/1 21 1997/1/1 14  
56 李56李 疾控科 中级 干部 主管护师 护士 1989/7/1 21 1989/8/1 21 护士长
57 江57江 合管办 初级 工人 工人初级 合管办 2000/9/1 10 2000/1/1 11  
58 陈58陈 合管办 中级 干部 主管护师 合管办 1989/7/1 21 1992/9/1 18 护理部主任
59 周59周 合管办 初级 干部 医士 合管办 1997/10/1 13 2009/3/21 2  
60 吴60吴 后勤科   合同   清洁工 1995/2/15 16 1995/2/1 16  
61 张61张 后勤科 初级 干部 医士 财务 1997/12/1 13 1997/10/1 13  
62 李62李 后勤科   工人   办公室 2002/12/1 8 2009/3/23 2 办公室主任
63 江63江 后勤科   合同   驾驶员 2009/12/7 1 2009/12/6 1  
64 陈64陈 后勤科   合同   洗浆工 2009/12/24 1 2009/12/24 1  
65 周65周 后勤科   合同   清洁工 2008/8/1 2 2008/7/1 2  
66 吴66吴 后勤科   合同   清洁工 2009/8/16 1 2009/8/16 1  
67 张67张 后勤科 中级 干部 会计师 财务 1996/10/1 14 1999/9/1 11  

实现代码

Option Explicit
'辅助列法
Sub 自定义排序()Dim RowN As LongRange("O1").Value = "外妇科"Range("O2").Value = "手术室"Range("O3").Value = "内儿科"Range("O4").Value = "西医科"Range("O5").Value = "中医科"Range("O6").Value = "耳鼻喉科"Range("O7").Value = "放射科"Range("O8").Value = "检验科"Range("O9").Value = "B超室"Range("O10").Value = "口腔科"Range("O11").Value = "针灸科"Range("O12").Value = "西药房"Range("O13").Value = "中药科"Range("O14").Value = "收费室"Range("O15").Value = "疾控科"Range("O16").Value = "合管办"Range("O17").Value = "后勤科"'将辅助列数据添加入自定义列表Application.AddCustomList Range("O1:O17")'执行排序Range("A1").CurrentRegion.Sort key1:=Range("C1"), order1:=xlAscending, Header:=xlYes, _orderCustom:=Application.CustomListCount + 1'删除辅助列Range("O1:O17").Clear'删除自定义列表Application.DeleteCustomList Application.CustomListCount
End Sub

单元格对象的Sort方法

Sort方法可以用来对单元格进行排序,其语法为:

Rng.Sort([Keyl],[Order1],[Key2],[Type],[Order2],[Key3],[Order3],[ Header],
[OrderCuStom],[ MatchCase],[Orientation],[SortMethod],[ DataOptionl],[ DataOption2],[DataOption3])

其中,Rng是需要进行排序的单元格区域。

  • 参数Key1、Key2和Key3为排序的关键字,可以为数据的标题或者该数据标题下所表示的任意数据的单元格对象。参数Order1、Order2、Order3分别为关键字排序顺序,可以为xIDescending(降序)或者xIAscending(升序)。
  • 参数DataOptionl、DataOption2、DataOption3分别表示对应关键字的数据类型,可以为xISortTextAsNumbers(将文本作为数字型数据排序)或者xISortNormal(分别对数字和文本数据进行排序)。
  • 参数Header表示数据区域是否含有标题,可以为xIGuess(由Excel自行判断)、xIYes(含有标题)或者xINo(无标题)。
  • 参数OrderCustom为自定义序列的序列号,如本例中,当需要使用按照自定义列表进行排序时,使用该选项。
  • 参数MatchCase为是否区分大小写,可以为True(区分大小写)或者False(不区分大小写)。
  • 参数Orientation表示排序的方向,可以为xISortRows或xITopToButtom(默认值,按行排序,即数据标题为首行),以及xISortColumns或xILeftToRight(按列排序,即数据标题为首列)。
  • 参数SortMethod表示排序的类型,可以为xIPinYin(按拼音顺序)或者xIStroke(按笔画顺序)。
  • 参数Type在对数据透视表排序时有效,其指定要排序的元素。可以为xISortLabels(按标签对数据透视表排序)或者xISortValues(按值对数据透视表排序)。

本例需要对部门列进行排序,仅有一个关键字,因而参数Keyl设为Range(“C1”),Header设为xIYes,表示含有标题行,OrderCustom设为自定义列表的序号,表示按照自定义序列排序。

添加和删除自定义序列CustomList

自定义序列CutomList是Excel程序对象级(Application)的一个特殊对象,VBA中提供了几个方法和属性来供开发者访问自定义序列,如表所示。

表  Validation Add方法的Operator参数

方法或属性

说  明

AddCustomList(ListArray, [Byrow])

添加自定义序列

参数ListArray可以为数组或者单元格区域对象

参数Byrow表示当ListArray为单元格区域时,按行取值(设置为True)或者按列取值(设置为False)

DeleteCustomList(ListNum)

删除自定义序列。参数ListNum表示自定义序列的序号

GetCustornListContents(ListNum)

教取自定义序列内容。参数ListNum表示自定义序列的序号

GetCustomListNum(ListArray)

获取自定义序列的序号。参数ListArray表示自定义序列的数组

CustomListCount

返回自定义序列数量

本例中,首先利用程序创建一个序列的临时区域列表,然后通过AddCustomList方法将该区域添加至自定义序列中,待排序完成后,再次利用DeleteCustomList方法删除。
    当有新的自定义序列添加时,新添加的自定义序列序号始终等于添加完该序列后的自定义序列数量,因而可以用CustomListCount来获取该自定义序列的序号。

使用自定义序列排序

在使用自定义序列排序时,参数OrderCustom使用的是自定义序列所在的序号。值得注意的是,此处的序号除了考虑自定序列之外,还包括“新序列”选项,因而此处使用的序号必须为自定义序列的序号+1。因而本例中该参数设置为Application. CustomListCount+1才能正确排序。

实现代码2

Sub 自定义排序2()With ActiveSheet.Sort'清除原有排序.SortFields.Clear'添加排序字段.SortFields.Add _Key:=Range("C2", Cells(Rows.Count, "C").End(xlUp)), _CustomOrder:="外妇科,手术室,内儿科,西医科,中医科,耳鼻喉科,检验科,B超室,口腔科," & _"针炙科,西药房,中药房,收费室,疾控科,合管办,后勤科"'设置排序区域.SetRange Range("A1").CurrentRegion'含标题行.Header = xlYes'区分大小写.MatchCase = False'排序方式为拼音.SortMethod = xlPinYin'应用排序.ApplyEnd With
End Sub

Sort对象

自Excel 2007版本开始,Sort对象被引入并用于排序操作。Sort对象是工作表(Worksheet)的一个属性。Sort对象是在Sort方法的基础上发展而来的。Sort对象的属性几乎和使用Sort方法时所使用的参数相同,不同的是与关键字相关的参数在Sort对象中以排序字段(SortFields)表示。因而在使用Sort对象进行排序时,首先需要创建排序字段,待设置完各属性后,使用Appy方法应用排序。

排序字段SortField

创建排序字段可以使用SortFields. Add方法,当需要删除排序字段时使用SortFields. Clear方法。SortFields. Add方法可以返回一个SortField对象,其语法如下:

SortFields.Add (Key,[SortOn],[Order],[CustomOrder],[DataOption])
  • 参数Key表示排序字段(关键字)所代表的单元格对象(Range)。
  • 参数SortOn表示排序的方法,可以为xISortOnValues(按值排序)、xISortOnCeIIColor(按单元格填充颜色排序)、xISortOnFontColor(按字体颜色排序)、xISortOnlcon(按图标排序)。
  • 参数Order表示排序顺序,可以为xIDescending(降序)或者xIAscending(升序)。
  • 参数CustomOrder表示是否按自定义列表进行排序,当需要此方法时,只需将该参数设为自定义列表所组成的文本(字符串)即可。该文本按照先后顺序排列列表项,各项目之间以逗号隔开。
  • 参数DataOption表示数据类型,可以为xISortTextAsNumbers(将文本作为数字型数据排序)或者xISortNormal(分别对数字和文本数据进行排序)。

按颜色排序

使用Sort对象进行排序时,允许开发者按照颜色排序。在添加排序字段(SortFields)时,需要将添加的排序字段(SordField)中SortOnValue的Colort值设置为所需要排序的颜色值,该值可以利用RGB函数得到。如需要将填充色为红色的单元格排在前面,则可以使用以下语句:

Sort.SortFields.Add(Rng,xlSortOnCellColor,xlAscending,,xlSortNormal).SortOnValue .Color=RGB(255,0,0)

当需要对多个颜色进行排序时,序字段,依次设置排序颜色为红色、比如红色在最前,蓝色随后,绿色最后,需要添加3个排蓝色和绿色。

设置排序区域SetRange方法

使用Sort对象进行排序,需要使用SetRange方法设置需要排序的数据区域。其语法为:

Sort.SetRange(Rng)

其中,Rng为单元格区域对象。

Excel 2010 VBA 入门 043 按自定义序列进行排序相关推荐

  1. Excel 2010 VBA 入门 114 设置自定义函数的说明

    使用Application.MacroOptions方法为自定义函数添加说明,以方便用户在使用时获取相应的帮助信息 码 Option ExplicitFunction MyArea(radius As ...

  2. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  3. Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡

    目录 题 码 Excel工作簿的实质 XML简介 customUI.xml 常用的功能区控件及通用属性 tabs控件和tab控件 group控件 命令控件 内置控件的ID customUI.xml中控 ...

  4. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  5. Excel 2010 VBA 入门 138 添加选项卡和内置控件

    目录 题 码 功能区简介 使用Excel选项自定义功能区 题 在功能区中添加一个选项卡,并在选项卡中添加内置控件 码 使用Excel选项中的[自定义功能区]添加选项卡和内置控件. 步骤1  选择&qu ...

  6. Excel 2010 VBA 入门 006 设置宏安全性

    目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. ​ 步骤2在"信任中心"的"宏设置"选项中 ...

  7. Excel 2010 VBA 入门 110 获取最小值的自定义函数

    目录 例 码 使用ParamArray关键字声明数组参数 IsMissing函数 IsArray函数 函数的嵌套与递归 ​​​​​​​ 例 在VBA编程过程中,经常会使用工作表函数Min来确立某组数中 ...

  8. Excel 2010 VBA 入门 140 在功能区添加按钮并运行VBA程序

    目录 题 码 回调(CallBack) IRibbonControl对象 题 如图所示,该表为员工档案.为了避免该表的数据被修改,该表已经被保护.如何在功能区添加一个按钮,当单击该按钮后可以将该表的数 ...

  9. Excel 2010 VBA 入门 066 读取其他工作簿的数据

    目录 示例 实现代码 打开关闭的工作簿 示例 如图所示,在"数据库.xlsx"工作簿中存有"销售数据",在相同目录下的工作簿  希望能够将该工作簿中该工作表中的 ...

  10. Excel 2010 VBA 入门 098 导入Access数据库的数据

    示例 Access是微软Office组件的数据库软件,使用它可以进行简单的数据库软件的开发.但Access的图表功能和数据分析功能不如Excel强大,常用的做法可以将Access中的数据导入 Exce ...

最新文章

  1. python数据类型-Python3基本数据类型(一、数字类型)
  2. Windows服务启动进程----Cjwdev.WindowsApi.dll
  3. AUTOSAR专业知识篇(八)-大众ID.4 X网络架构详解
  4. angularjs 利用filter进行表单查询及分页查询
  5. 工作六年 我终于学会了这项技能 可惜晚了!!!
  6. 原生js之同级元素添加移除class
  7. 4.2 各种各样的卷积层
  8. Hadoop启动jobhistoryserver
  9. Facebook 游戏开发更新文档 API 参考文档 v5.0
  10. JavaScript:屏蔽浏览器右键点击事件
  11. c++ vector、stack、queue、map用法总结
  12. maven实现RBAC权限管理,实现不同角色下对应不同菜单
  13. 五类推荐系统算法,非常好使,非常全面
  14. 通俗易懂的Spatial Transformer Networks(STN)(一)
  15. wordpress 企业 主题 html5,Maxx 漂亮简洁的企业 WordPress主题
  16. opengl 多边形线框_OpenGL - 在纹理多边形上创建边框
  17. PX4多冗余传感器代码解读
  18. weautomate rpa开发心得
  19. 微信支付限额问题最详细解答
  20. vue-cli 组件传值:父传子props

热门文章

  1. 电脑开机一直自动重启
  2. 树莓派安装系统和系统备份还原
  3. 云计算复习知识总结(很有用,全是干货)
  4. 转自登峰之群:晓军教材(一)
  5. 2048游戏DQN实验
  6. Schematic export failed or was cancelled. Please consult the transcript in the source windo
  7. python在财务中的应用实训报告-衡南2020年_商务办公软件应用与实践_高校邦_期末答案...
  8. 电脑键盘上各个键的作用
  9. Python远程开关机
  10. 学习dicom没什么窍门