ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

都来看看这个排序怎么实现,再来看看单位前面的量怎么提取

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-3 11:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件中有一段关于产生格式符的有益测试,标记下:
  1. Sub ss()
  2.     a = ""
  3.     b = Val(a)
  4.     c = Format(b, "0000")
  5. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-1-3 11:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
aoe1981 发表于 2015-1-3 11:16
这个排序处理比前面简单了,只需做一次冒泡排序即可……

任意修改层数、每层位数均不受影响,一组测试图 ...

只是针对本附件,通用不是不可能。

TA的精华主题

TA的得分主题

发表于 2015-1-3 12:21 | 显示全部楼层
通用


按B列排序2.zip (30.95 KB, 下载次数: 39)

TA的精华主题

TA的得分主题

发表于 2015-1-3 12:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hlly888 发表于 2015-1-3 12:21
通用

有个问题:在
1-2-3
1-2-3-1
时排序是:
1-2-3-1
1-2-3

TA的精华主题

TA的得分主题

发表于 2015-1-3 13:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
根据hlly888程序修改完善
  1. Sub 排序2() 'hlly888
  2. Range("a1:gz65536").ClearContents
  3. Application.ScreenUpdating = False
  4. Dim arr, x&, i&, k%, da%, c, tim
  5. tim = Timer
  6. x = Sheet1.Range("a65536").End(3).Row
  7. arr = Sheet1.Range("a1:a" & x)
  8. ReDim brr(1 To x, 1 To 10000)
  9.     For i = 1 To x
  10.         c = Split(arr(i, 1), "-")
  11.         If UBound(c) > da Then da = UBound(c)
  12.         For k = 0 To UBound(c)
  13.             brr(i, k + 1) = c(k)
  14.         Next
  15.     Next
  16.     [a1].Resize(x, 1) = arr
  17.     [b1].Resize(x, da + 1) = brr
  18.     [a1].CurrentRegion.SpecialCells(xlCellTypeBlanks) = 0
  19.     For j = da To 2 Step -1
  20.         Cells(1, 1).CurrentRegion.Sort Key1:=Cells(1, j), Order1:=xlAscending, Header:=xlNo
  21.     Next
  22.     [b1].Resize(x, da + 1).ClearContents
  23. [c1] = Format(Timer - tim, "0.00") & "秒"
  24. Application.ScreenUpdating = True
  25. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-1-3 13:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
按B列排序2.zip (33.16 KB, 下载次数: 44)

TA的精华主题

TA的得分主题

发表于 2015-1-3 13:39 | 显示全部楼层
本帖最后由 bluexuemei 于 2015-1-3 13:40 编辑
  1. Sub sortdata提取文本()
  2. '需要安装ACTIVERUBY ,下载地址 http://www.artonx.org/data/asr/Ruby-2.1.1.msi
  3.     Dim y, ojs As Object
  4.     Set ojs = CreateObject("scriptcontrol"): ojs.Language = "rubyscript"
  5.     ojs.eval ("def aa(aa) $aa=aa.flatten end")
  6.     y = ojs.Run("aa", Sheet1.Range("A1", [a1].End(4)).Value)
  7.     y = ojs.eval("$aa.sort_by{|x|x.split('-').map(&:to_i)}.zip")
  8.     Sheet1.[g1].Resize(UBound(y) + 1).NumberFormatLocal = "@"
  9.     Sheet1.[g1].Resize(UBound(y) + 1) = y
  10.     Set ojs = Nothing
  11.     'Stop
  12. End Sub
复制代码

点评

似乎是类似字典的语言, 这种代码很不懂,但写来总是很简洁,让人敬佩!  发表于 2015-1-3 14:25

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-3 13:40 | 显示全部楼层
就是大纲排序

号导入.rar

29.81 KB, 下载次数: 89

点评

代码过多,排序效率出奇得高……算了,我死抱着“冒泡排序”,算是抱残守缺了……  发表于 2015-1-3 15:58

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-3 15:51 | 显示全部楼层
本帖最后由 qy1219no2 于 2015-1-3 15:53 编辑

我也来冒个泡,不过层级控制在10层以内没有问题(当然也可稍作修改代码即可实现层级的扩展),每级最大编号9999(也可对代码稍作修改,即可扩展最大编号)
  1. Sub txtNumIdSort()
  2.     Dim sj() As String, k&, i&, tmp() As String, arrSort As Object
  3.     nR = [a65536].End(xlUp).Row
  4.     arr = [a1].Resize(nR, 1)
  5.     Set arrSort = CreateObject("System.Collections.ArrayList")
  6.     ReDim tmp(9), sj(nR - 1, 0)
  7.     For i = 1 To nR
  8.         brr = Split(arr(i, 1), "-")
  9.         For k = 0 To 9
  10.             If k <= UBound(brr) Then
  11.                 tmp(k) = Format(brr(k), "0000")
  12.             Else
  13.                 tmp(k) = "0000"
  14.             End If
  15.         Next
  16.         arrSort.Add Join(tmp, "-")
  17.     Next
  18.     arrSort.Sort
  19.     For i = 0 To nR - 1
  20.         brr = Split(arrSort(i), "-")
  21.         For k = 0 To 9
  22.             sj(i, 0) = sj(i, 0) & IIf(brr(k) = "0000", "", "-" & Val(brr(k)))
  23.         Next
  24.         sj(i, 0) = Mid(sj(i, 0), 2, 99)
  25.     Next
  26.     [c1].Resize(nR, 1) = sj
  27. End Sub
复制代码

点评

对这些语句表示钦佩:Set arrSort = CreateObject("System.Collections.ArrayList")  !!!  发表于 2015-1-3 16:01

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-3 16:03 | 显示全部楼层
qy1219no2 发表于 2015-1-3 15:51
我也来冒个泡,不过层级控制在10层以内没有问题(当然也可稍作修改代码即可实现层级的扩展),每级最大编号 ...

对那句不太懂……

感觉核心的排序语句是这句:arrSort.Sort

之前是数据改造,之后是数据还原……

不知,可有猜中?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 05:24 , Processed in 0.040720 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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