|
楼主 |
发表于 2014-7-28 13:31
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 aoe1981 于 2014-7-28 18:46 编辑
截取一段排序模块中的代码:
- Public Sub px1() '总分降序+数学降序+语文降序+综合降序
- Dim zfl%, xbl%, xhl%, xml%, sxl%, ywl%, zhl%, h&, l&
- Application.ScreenUpdating = False
- With 报名信息表
- zfl = .Rows(2).Find(what:="总分").Column
- sxl = .Rows(2).Find(what:="数学").Column
- ywl = .Rows(2).Find(what:="语文").Column
- zhl = .Rows(2).Find(what:="综合").Column
- h = .UsedRange.Rows.Count
- l = .UsedRange.Columns.Count
- With .Sort
- .SortFields.Clear
- .SortFields.Add Key:=Range(Cells(3, zfl), Cells(h, zfl)), Order:=xlDescending
- .SortFields.Add Key:=Range(Cells(3, sxl), Cells(h, sxl)), Order:=xlDescending
- .SortFields.Add Key:=Range(Cells(3, ywl), Cells(h, ywl)), Order:=xlDescending
- .SortFields.Add Key:=Range(Cells(3, zhl), Cells(h, zhl)), Order:=xlDescending
- .SetRange Range(Cells(3, 1), Cells(h, l))
- .Apply
- End With
- End With
- Application.ScreenUpdating = True
- End Sub
复制代码 貌似很复杂,或者是编写的很啰嗦,有三个原因吧:
1.基本代码来自于Excel2010中录制,在此基础上修改了下,囿于水平;
2.增强了排序操作的适应性,当“报名信息表”增加减少学生(增加减少行)、增加减少列、移动列时,代码能够自动识别,保证排序的正确性,当然,不是针对所有情况,比如:第一行是表头,第二行是标题行,这个是万万不能改动的!
3.由于单纯总分降序排序后总分相等的学生可能很多,你再做一些其他的排序,再返回总分降序排序时,会发现名次不是很吻合,因为,你没有明确告诉计算机总分相同时以什么指标为依据排序,它采取了默认的方法……为了规避这种现象,我实际上用的是:总分降序+数学降序+语文降序+综合降序,这样唯一性大大增强,当然,首要是针对真实的数据,不是变造的。
|
评分
-
1
查看全部评分
-
|