excel VBA排序的问题

A列数据如图,要以A列数据升序排序,但是遇到两位数的时候,排序会以十位数小的优先排,比如说“503-2-11-1”排到了“503-2-3-2”的上面,不知道怎么解决了,求... A列数据如图,要以A列数据升序排序,但是遇到两位数的时候,排序会以十位数小的优先排,比如说“503-2-11-1”排到了“503-2-3-2”的上面,不知道怎么解决了,求大神帮助!附上代码: 展开
 我来答
阳光上的桥
2018-03-05 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65813
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

原因:字符串比较的时候是左对齐,系统并不知道你的-是分开的整数。

解决:增加辅助列,该列数据的每个域宽度相同,使用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
展开全部

遗憾的说,这个就是排序规则,自己编一个排序,你今后的编码同样要适应编写的程序的规则,那么不如直接遵从系统本身的规则来的简单,关于你的编码,我给一点我的想法,我测试过是可行的:

  1. 首先要清楚文本排序是顺序文本比对,就是文本从左到右挨个比较

  2. 将各个分段的长度调整一致,第一段三位,第二段一位,第三段二位,第四段一位,即统一为000-0-00-0的格式,看你自己的总体需求,这个规划好了,之后数据维护,排序也方便

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式