ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多小数点,进行数字排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-12 04:04 | 显示全部楼层 |阅读模式
本帖最后由 ning84 于 2022-10-12 04:06 编辑

image.png

能有这么简单吗?
把第一个小数点前的数字分离,进行排序就是可以?


dd.jpg

Book1.rar

60.85 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2022-10-12 09:12 | 显示全部楼层
拆开4部分再来排序吧,用分列功能,再用多条件排序即可

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-12 15:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ning84 于 2022-10-12 17:46 编辑

dd.jpg


菜鸟学习体会,数组+字典等方法很难实现,不可能比Excel内置的排序功能效率高。

  1. Sub ls()
  2.    Dim Sht As Worksheet
  3.        Set Sht = Sheet2
  4.    Dim Rng As Range, oRng As Range
  5.       Set Rng = Cells(4, 1).CurrentRegion
  6.       'Debug.Print Rng.Address
  7.       ''
  8.       For ii = 1 To Rng.Rows.Count
  9.           s = Split(Rng(ii, 1), ".")
  10.           Rng(ii, 4) = Rng(ii, 1)
  11.           Rng(ii, 5) = Rng(ii, 2)
  12.           For jj = 0 To UBound(s)
  13.               Rng(ii, 6 + jj) = s(jj)
  14.           Next jj
  15.       Next ii
  16.       
  17.       Set Rng = Rng(ii - 1, jj).CurrentRegion
  18.       With Sht.Sort
  19.         With .SortFields
  20.              .Clear
  21.              For jj = 3 To Rng.Columns.Count
  22.                   Set oRng = Rng(1, jj).Resize(Rng.Rows.Count, 1)
  23.                   'Debug.Print oRng.Address(RowAbsolute:=False, ColumnAbsolute:=False)
  24.                   Debug.Print oRng.Address(0, 0)
  25.                   .Add Key:=Range(oRng.Address(0, 0)) _
  26.                           , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  27.              Next jj
  28.         End With
  29.         .SetRange Rng
  30.         .Header = xlGuess
  31.         .MatchCase = False
  32.         .Orientation = xlTopToBottom
  33.         .SortMethod = xlPinYin
  34.         .Apply
  35.       
  36.       End With

  37.       ''
  38. End Sub
复制代码
  1. Sub ll()
  2.    Dim Rng As Range, SortRng As Range
  3.        With Sheet2
  4.            Set Rng = .Cells(4, 1).CurrentRegion
  5.            Set SortRng = .Cells(4, 1).Resize(Rng.Rows.Count, 1)
  6.            Debug.Print Rng.Address, SortRng.Address
  7.            SpecialCharacterSeparation Rng, SortRng, ".", 8
  8.        End With
  9. End Sub

  10. Function SpecialCharacterSeparation(ManyRng As Range, SortRng As Range, Separation As String, Col As Integer)
  11.      Dim Sht As Worksheet
  12.          Set Sht = ManyRng.Parent
  13.      Dim Rng As Range, tmpSortRng As Range
  14.          ''
  15.          For ii = 1 To ManyRng.Rows.Count
  16.              s = Split(SortRng(ii, 1), Separation)
  17.              For jj = 0 To UBound(s)
  18.                  Sht.Cells(ManyRng.Row + ii - 1, Col + jj) = s(jj)
  19.              Next jj
  20.          Next ii
  21.          ''
  22.       Set Rng = Sht.Cells(ManyRng.Row + ii - 1 - 1, Col + jj - 1).CurrentRegion
  23.       Set tmpSortRng = Rng
  24.       Set Rng = Sht.Cells(ManyRng.Row, 1).Resize(Rng.Rows.Count, Rng.Column + Rng.Columns.Count - 1)
  25.       Debug.Print Rng.Address
  26.       Stop
  27.       With Sht.Sort
  28.         With .SortFields
  29.              .Clear
  30.              For jj = 1 To tmpSortRng.Columns.Count
  31.                   Set oRng = tmpSortRng(1, jj).Resize(Rng.Rows.Count, 1)

  32.                   .Add Key:=Range(oRng.Address(0, 0)) _
  33.                           , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  34.              Next jj
  35.         End With
  36.         .SetRange Rng
  37.         .Header = xlGuess
  38.         .MatchCase = False
  39.         .Orientation = xlTopToBottom
  40.         .SortMethod = xlPinYin
  41.         .Apply
  42.       End With
  43.          
  44. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2022-10-12 21:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
排序函数sort和sortby,版本要够

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-12 22:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


用数组方法,怎么想也没什么方法比Excel的多条件方法跟家简单方便。
  1.       ''
  2.       With Sht.Sort
  3.         With .SortFields
  4.              .Clear
  5.              For jj = 1 To tmpSortRng.Columns.Count
  6.                   Set oRng = tmpSortRng(1, jj).Resize(Rng.Rows.Count, 1)

  7.                   .Add Key:=Range(oRng.Address(0, 0)) _
  8.                           , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  9.              Next jj
  10.         End With
  11.         .SetRange Rng
  12.         .Header = xlGuess
  13.         .MatchCase = False
  14.         .Orientation = xlTopToBottom
  15.         .SortMethod = xlPinYin
  16.         .Apply
  17.       End With
复制代码




dd.jpg

  1. Private Sub ArraySort()
  2.    Dim Arr(5)
  3.     Arr(0) = Array(25, 9, 340, 1)
  4.     Arr(1) = Array(32, 3, 574, 2)
  5.     Arr(2) = Array(46, 2, 320, 3)
  6.     Arr(3) = Array(87, 8, 376, 2)
  7.     Arr(4) = Array(47, 0, 449, 1)
  8.     Arr(5) = Array(52, 7, 677, 5)
  9. Stop
  10. End Sub
复制代码


Book1.rar

33.06 KB, 下载次数: 2

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 21:12 , Processed in 0.021562 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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