ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6251|回复: 21

[分享] 地址门牌号加房号排序,希望可以帮助有需要的朋友(不是本人作品)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-2-2 00:05 | 显示全部楼层 |阅读模式
本帖最后由 黄金万两︶ㄣ 于 2014-2-2 16:47 编辑

虽然是小小的排序,希望对同样出现这类问题的朋友起到小小帮助。{:soso_e113:}
更新的附件(已改进)是赵老师编写的作品,欢迎下载使用。在这里我代表所有需要这样排序的朋友谢谢赵老师!



将某列变换再排序.rar

22.32 KB, 下载次数: 133

排序

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-2-2 00:26 | 显示全部楼层
邀请收到,按照你的思路,稍微简化一下:
  1. Sub Macro1()
  2.     Dim matchs As Object, arr, brr&(), i&
  3.     arr = Range("b2:b" & Range("b" & Rows.Count).End(xlUp).Row)
  4.     ReDim brr(1 To UBound(arr), 1 To 1)
  5.     With CreateObject("VBScript.RegExp")
  6.         .Global = True
  7.         .Pattern = "[0-9]+"
  8.         For i = 1 To UBound(arr)
  9.             Set matchs = .Execute(arr(i, 1))
  10.             If .test(arr(i, 1)) Then brr(i, 1) = matchs(0).Value
  11.         Next
  12.     End With
  13.     [c2].Resize(i - 1) = brr
  14.     Range("A2:C" & i).Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlNo
  15.     [c:c].Clear
  16. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-2-2 00:28 | 显示全部楼层
请测试附件
将某列变换再排序.rar (18.88 KB, 下载次数: 61)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-2 09:48 | 显示全部楼层
zhaogang1960 发表于 2014-2-2 00:28
请测试附件

测试过,非常好。因早前上传附件不能体现出再有C列详址后的效果,所以我再更新附件了,老师有时间再帮助修正吧。

TA的精华主题

TA的得分主题

发表于 2014-2-2 11:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
黄金万两︶ㄣ 发表于 2014-2-2 09:48
测试过,非常好。因早前上传附件不能体现出再有C列详址后的效果,所以我再更新附件了,老师有时间再帮助修 ...
  1. Sub Macro1()
  2.     Dim matchs As Object, arr, brr&(), i&
  3.     arr = Range("b2:b" & Range("b" & Rows.Count).End(xlUp).Row)
  4.     ReDim brr(1 To UBound(arr), 1 To 1)
  5.     With CreateObject("VBScript.RegExp")
  6.         .Global = True
  7.         .Pattern = "[0-9]+"
  8.         For i = 1 To UBound(arr)
  9.             Set matchs = .Execute(arr(i, 1))
  10.             If .test(arr(i, 1)) Then brr(i, 1) = matchs(0).Value
  11.         Next
  12.     End With
  13.     With [d2].Resize(i - 1)
  14.         .Value = brr
  15.         Range("A2:D" & i).Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("D2"), Order2:=xlAscending, Header:=xlNo
  16.         .Clear
  17.     End With
  18. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-2-2 11:50 | 显示全部楼层
请测试附件
将某列变换再排序.rar (19.84 KB, 下载次数: 31)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-2 14:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2014-2-2 11:50
请测试附件

附件测试过,B列乱了。剩提数字要加小数点才可以排序完成的

TA的精华主题

TA的得分主题

发表于 2014-2-2 14:17 | 显示全部楼层
黄金万两︶ㄣ 发表于 2014-2-2 14:09
附件测试过,B列乱了。剩提数字要加小数点才可以排序完成的

B列数据有小数点吗?
怎么个乱了,请上传附件说明你要达到的效果

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-2 14:18 | 显示全部楼层
本帖最后由 黄金万两︶ㄣ 于 2014-2-2 14:21 编辑

我附件是B列中在文字发生多种变化都可以排序。只是差一点不完美,总比一般排序好多了,因为一般排序的话,出现的是从10开始的。一般排序这种门牌号看得人眼花潦乱,如果一般排序是上门派米的话,那就看门牌号看得麻烦了。所以就特意思发帖与大家一起分享,因为差一点不完美,所以还是请大神门给点意见。

点评

不知所云,请用模拟效果说明要求  发表于 2014-2-2 14:19

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-2 15:43 | 显示全部楼层
本帖最后由 黄金万两︶ㄣ 于 2014-2-2 15:45 编辑
zhaogang1960 发表于 2014-2-2 14:17
B列数据有小数点吗?
怎么个乱了,请上传附件说明你要达到的效果

不好意思!我说得不清楚。B列数据是没有小数点,我说的小数点是在过程中,用Asc函数把某一单元格号数当中的文字转成数字再前面连接一个点,再连接这单元格用正侧提取出来的数字的后面。如像附件中B列单元格中16号与16号之几为例,16号转换一下就变成正侧提取的数字(16)连接(.)连接(Asc函数转换的数字)就是:16.17723,16号之一转换一下就变成正侧提取的数字(16)连接(.)连接(Asc函数转换的数字)就是:16.3989。那么转换后的16.17723与16.3989就可以对比可以排序了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 18:16 , Processed in 0.048749 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表