ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

单元格内数据是逗号隔开的,宏如何实现给单元格内数据由小到大排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-23 15:59 | 显示全部楼层
请测试,如有问题请指正

TA的精华主题

TA的得分主题

发表于 2015-5-23 16:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
排序.zip (13.34 KB, 下载次数: 37)

TA的精华主题

TA的得分主题

发表于 2015-5-24 07:21 | 显示全部楼层
arcticstar 发表于 2015-5-23 13:58
附件为2003版,请帮解决,谢谢!
  1. Private Sub Cmm()
  2.     [B:B].ClearContents
  3.     Dim a(), b()
  4.        Set d = CreateObject("scripting.dictionary")
  5.     For Each c In Range([A1], Cells(Rows.Count, 1).End(xlUp))
  6.            s = Trim(c.Value)
  7.         If Len(s) > 0 And InStr(s, ",") > 0 And s Like "*[0-9]*" Then
  8.             x = Split(s, ",")
  9.           If UBound(x) = LBound(x) Then
  10.                 c.Offset(, 1) = s
  11.           Else
  12.                n = 0
  13.             For j = LBound(x) To UBound(x)
  14.               For i = 1 To Len(x(j))
  15.                 If (Asc(Mid(x(j), i, 1)) < 48) Or (Asc(Mid(x(j), i, 1)) > 57) Then n = n + 1 Else Exit For
  16.               Next
  17.                    ReDim Preserve a(0 To j)
  18.                    ReDim Preserve b(0 To j)
  19.                    a(j) = Mid(x(j), 1, n)
  20.                    b(j) = CInt(Mid(x(j), n + 1))
  21.                    d(b(j)) = a(j)
  22.                    n = 0
  23.              Next
  24.                    For ii = 0 To UBound(x)
  25.                      For jj = ii + 1 To UBound(x)
  26.                        If b(ii) > b(jj) Then
  27.                           TEMP = b(jj)
  28.                           b(jj) = b(ii)
  29.                           b(ii) = TEMP
  30.                        End If
  31.                      Next
  32.                    Next
  33.                     TEMP = ""
  34.                     s = ""
  35.                     kk = kk + 1
  36.                  For i = LBound(b) To UBound(b)
  37.                    If d.Exists(b(i)) Then s = s & d(b(i)) & b(i) & ","
  38.                  Next
  39.                    d.RemoveAll
  40.                    Erase a, b
  41.                    c.Offset(, 1) = s
  42.           End If
  43.         End If
  44.     Next
  45.    End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-24 09:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果数据如楼主给出的示例,可以考虑天字母,split后放到表格内排序,然后join变通处理下

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-13 09:35 | 显示全部楼层
本帖最后由 arcticstar 于 2015-8-13 09:55 编辑

您这个排序很好用,但有个问题,若数字部分包含0,则排序会丢失包含0的数据,请帮看能否修改下。谢谢!
比如 某一个单元格数据为:RE6,RE7,RE8,RE0
则排序后数据为:RE6,RE7,RE8,会丢失掉RE0

排序.zip

13.13 KB, 下载次数: 13

请帮解决数字为0时问题

TA的精华主题

TA的得分主题

发表于 2015-8-13 14:11 | 显示全部楼层
arcticstar 发表于 2015-8-13 09:35
您这个排序很好用,但有个问题,若数字部分包含0,则排序会丢失包含0的数据,请帮看能否修改下。谢谢!
...

排序2.zip (13.43 KB, 下载次数: 26)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-18 16:53 | 显示全部楼层
本帖最后由 arcticstar 于 2015-8-18 17:28 编辑

谢谢,但有新问题了:1.若单元格中数字部分相同,则排序后数据会多出来,如AC8,AA8,CC7,排序后数据为:CC7,AC8,AA8,AC8,AA8;
2.若数据中包含符号,则数据也会多出来,如S-L,S-N,排序后数据为:S-L,S-N,S-L,S-N;
望大侠帮解决下。

排序2.zip

13.82 KB, 下载次数: 19

数字部分相同,排序后会有多余数据

TA的精华主题

TA的得分主题

发表于 2015-8-19 10:19 | 显示全部楼层
liulang0808 发表于 2015-5-24 09:34
如果数据如楼主给出的示例,可以考虑天字母,split后放到表格内排序,然后join变通处理下

楼主在钓鱼呢……

问题的条件不断变化……越来越复杂。

所以,任何阶段给出的解决方案,都会被楼主用新的反例来推翻……

为什么不能一次性把问题要求说清楚呢?……呵呵。

TA的精华主题

TA的得分主题

发表于 2015-8-19 10:20 | 显示全部楼层
arcticstar 发表于 2015-8-18 16:53
谢谢,但有新问题了:1.若单元格中数字部分相同,则排序后数据会多出来,如AC8,AA8,CC7,排序后数据为:C ...

楼主说:【谢谢,但有新问题了……】

楼主你能不能把要求一次性说明白?!!!

TA的精华主题

TA的得分主题

发表于 2015-8-19 11:43 | 显示全部楼层
arcticstar 发表于 2015-8-18 16:53
谢谢,但有新问题了:1.若单元格中数字部分相同,则排序后数据会多出来,如AC8,AA8,CC7,排序后数据为:C ...

为什么不用19L的自定义函数?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 11:19 , Processed in 0.041561 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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