【转载】VBA使⽤Sort⽅法对数据进⾏排序
转⾃:lhome/thread-1216698-1-1.html
在实际运⽤中对数据排序,采取录制宏的⽅式取得Sort⽅法代码,
由于理解得不够透彻,得出⼀些错误的理解:
1、Sort⽅法对⾮当前⼯作表⽆效;
2、Sort⽅法对隐藏的⼯作表⽆效。
但是在看完⾹川⽼师的2014年3⽉21⽇发的贴
再经过⾃⼰的反复测试后,知道上⾯两个观点是错误的,原因很简单:排序的数据范围是否指定了⼯作表,Sort 参数Key引⽤的位置是否前⾯指定了⼯作表?
由于Sort语句的写法,前⾯是运⾏语句,中间有⼀个空格,后⾯才是参数,
因为有空格,所以前⾯语句指定的⼯作表并不对后⾯参数引⽤中⽣效,所以参数中还需要再指定,很多⼈都栽在这个地⽅,我就是例⼦。
今天发贴分享,
还有⼀个原因,就是想说⼀下⾹川⽼师的贴,有些地⽅容易让⼈误解或是关键点讲得不清楚(我相信⾹川⽼师肯定是精通的,但是在写⽂案的时候并不能完全表达她的意思)。
在这⾥我就把我的感悟分享⼀下,也帮帮其他有需要的⼈,因为⾹川⽼师的贴还是挺抢⼿的。
1、参数顺序有⼀个地⽅容易被忽略,就是下⾯红圈中的TYPE参数。
为什么这么说呢?⼤家仔细看⼀下参数的顺序,是不是很容易理解为:Key1,Order1,Key2,Order2,Key3,Order3……?
为什么三个排序关键字参数(⼀个关键字对应两个参数),唯独第⼆个关键字中间多⼀个Type参数呢?
什么意思?⾹川⽼师可没讲清楚。但是我相信很多⼈会忽略这个,那就会栽⼤跟头,因为每个参数都有固定的位置,
忽略⼀个,后⾯的顺序全部错乱。呵呵,那个查错误的痛苦反正我是不想再经历了。
2、容易误导的地⽅,就是Header参数的位置(这个绝对与⾹川⽼师⽆关,只是阅读者的个⼈习惯)
图中蓝圈的位置是3,我就以为Header参数位于第三了,但是⾹川⽼师明确指出了代码中参数位于什么位置,如图中红圈位置。
这个呢,我是犯了这个错误,结果害得我可惨了。我之所以被误导也与贴⼦结尾部分有关,看下图:
图中“或根据默认为:”,不能这么说,这样写的默认就是⼿动仅指定了两个参数,关键字1和排序顺序,其他都默认。
⽽实战中,最少三个参数很重要,除了关键字1和排序顺序,标题⾏Header也很关键,这取决于排序区域是否选择了⾸⾏标题⾏,
vba排序函数sort用法如果包含⾸⾏标题,则必须指定Header为⾸⾏标题,不参与排序。
反之则指定为⽆标题,所有记录⾏进⾏排序。
如果不指定,则参数的意思让EXCEL⾃⼰去猜,这个会出⼤问题,反正我在实际开发写代码时,是经过反复测试得出的经验。
所以上⾯那⼀句“默认”真可谓“害⼈不浅”啊!呵呵,⾹川⽼师别怪我,是我理解有误,千万千万别⽣⽓哈!
VBA写代码的时候,我⼀般在特别熟悉参数的位置时候才考虑简写,不熟悉的时候,还是⽼⽼实实的敲代码⽐较实在,关于sort⽅法,我从来不简写,⼀直都是这样写
Range("A1:F14").Sort key1:=Range("A2"), order1:=xlAscending, key2:=Range("D1"), order2:=xlAscending,
Header:=xlGuess
这样就可以保证不出错,也知道每写⼀个代表参数代表什么意思,这样就不存在漏了参数的情况
⾄于你说的指定⼯作表的问题,这是编程常识,谁都知道,光秃秃Range代表的是当前激活的⼯作表中的单元格,如果是对⾮激活的⼯作表进⾏操作,肯定要指定⼯作表的,不然引⽤出错或者达不到预期的结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论