2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Excel VBA 入门 043 按自定义序列进行排序

Excel VBA 入门 043 按自定义序列进行排序

时间:2022-02-06 23:48:14

相关推荐

Excel  VBA 入门 043 按自定义序列进行排序

目录

示例:

实现代码

单元格对象的Sort方法

添加和删除自定义序列CustomList

使用自定义序列排序

实现代码2

Sort对象

排序字段SortField

按颜色排序

设置排序区域SetRange方法

示例:

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

现?

实现代码

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.CustomListCountEnd 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方法将该区域添加至自定义序列中,待排序完成后,再次利用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 WithEnd Sub

Sort对象

自Excel 版本开始,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为单元格区域对象。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。