excel VBA排序的问题
A列数据如图,要以A列数据升序排序,但是遇到两位数的时候,排序会以十位数小的优先排,比如说“503-2-11-1”排到了“503-2-3-2”的上面,不知道怎么解决了,求...
A列数据如图,要以A列数据升序排序,但是遇到两位数的时候,排序会以十位数小的优先排,比如说“503-2-11-1”排到了“503-2-3-2”的上面,不知道怎么解决了,求大神帮助!附上代码:
展开
2个回答
展开全部
原因:字符串比较的时候是左对齐,系统并不知道你的-是分开的整数。
解决:增加辅助列,该列数据的每个域宽度相同,使用0填充,例如“503-2-11-1”、“503-2-3-2”分别转换为“00503-00002-00011-00001”、“00503-00002-00003-00002”,按这一列进行排序,结果就是你满足的。做这一列也可以用VBA来实现,原则是分开在合拢,例如A列转换为H列的语句:
for i=10 to 28 '行
s=""
for each w in split(cells(i,"A"),"-")
s=s & format("00000", w+0)
next w
cells(i,"H")=s
next i
如果5位还不是最大宽度,可以加大,最大到15位,注意最后按H列排序,排序后可以删除H列。
追问
感觉您这个方法可行,按“-”拆分后还是不能把每一节单独转换为五位数,能再麻烦您一下吗?
追答
format的两个参数交换一下
2018-03-05
展开全部
遗憾的说,这个就是排序规则,自己编一个排序,你今后的编码同样要适应编写的程序的规则,那么不如直接遵从系统本身的规则来的简单,关于你的编码,我给一点我的想法,我测试过是可行的:
首先要清楚文本排序是顺序文本比对,就是文本从左到右挨个比较
将各个分段的长度调整一致,第一段三位,第二段一位,第三段二位,第四段一位,即统一为000-0-00-0的格式,看你自己的总体需求,这个规划好了,之后数据维护,排序也方便
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询