ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 排序问题,内容是文本+字母 ,按照字母的指定顺序排序

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-14 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一把小刀闯天下 发表于 2020-7-13 19:38
目测A列有序,而且颜色跟A列有关,那就假设A列有序就可以了

--------------

image.png 老师    多运行几次   就会这样   而且运行第二次后就是这样子   有时候没有反应的 我也很疑惑 ,   颜色全部乱了

TA的精华主题

TA的得分主题

发表于 2020-7-14 10:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ggmmlol 于 2020-7-14 10:08 编辑
  1. Sub test()
  2.     With Range("A1").CurrentRegion.Resize(, 4)
  3.         ar = .Value
  4.         For i = 2 To UBound(ar)
  5.             lb = LenB(ar(i, 3))
  6.             l = Len(ar(i, 3))
  7.             s = Mid(ar(i, 3), lb - l + 1)
  8.             If Not IsNumeric(s) Then
  9.                 s = Application.Match(s, [{"XS","S","M","L","XL","2XL","3XL"}], 0)
  10.             End If
  11.             ar(i, 4) = s
  12.         Next
  13.         .Value = ar
  14.         .Sort .Cells(1), , .Cells(4), , , .Cells(3), , xlYes
  15.         .Columns(4).Clear
  16.     End With
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2020-7-14 14:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
976190982 发表于 2020-7-14 09:16
老师    多运行几次   就会这样   而且运行第二次后就是这样子   有时候没有反应的 我也很疑惑 ,   颜色 ...

一楼你提供的附件中相同货号为同色,但图中并不是这样的

---------------

觉得你的条件应该是这样的:
1、相同货号作为一个数据区,本来有序作一下简单判断就可以
2、同一数据区中按规格列颜色再分区,这样颜色块就不会跑来跑去了(需要确定)
3、分区后再按“XS,S,M,L,XL,2XL,3XL,4XL“顺序排序

--------------------

条件先要确认好,当然还得要上附件,,,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-14 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 rym9401 于 2020-7-14 14:51 编辑

不知道表述清楚否
TIM图片20200709122821.png

TA的精华主题

TA的得分主题

发表于 2020-7-14 15:19 | 显示全部楼层
'给你加了一个条件,就是13楼的,,,

Option Explicit

Sub test()
  Dim arr, i, j, p, dic
  Set dic = CreateObject("scripting.dictionary")
  arr = Split("XS,S,M,L,XL,2XL,3XL,4XL", ",")
  For i = 0 To UBound(arr)
    dic(arr(i)) = i - 20
  Next
  arr = [a1].CurrentRegion.Offset(1).Resize(, 6).Value
  For i = 1 To UBound(arr, 1) - 1
    For j = Len(arr(i, 3)) To 1 Step -1
      If Asc(Mid(arr(i, 3), j, 1)) < 0 Then
        arr(i, 4) = left(arr(i, 3), j)
        arr(i, 5) = Mid(arr(i, 3), j + 1)
        If dic.exists(arr(i, 5)) Then
          arr(i, 6) = dic(arr(i, 5))
        Else
          If IsNumeric(arr(i, 5)) Then
            arr(i, 6) = Val(arr(i, 5))
          Else
            arr(i, 6) = arr(i, 5)
          End If
        End If
        Exit For
      End If
    Next
  Next
  For i = 1 To UBound(arr, 1) - 1
    If arr(i, 1) <> arr(i + 1, 1) Then
      For j = p + 1 To i
        If arr(j, 4) <> arr(j + 1, 4) Or j = i Then
          Call bsort(arr, p + 1, j, 1, UBound(arr, 2), 6)
          p = j
        End If
      Next
      p = i
    End If
  Next
  [a2].Resize(UBound(arr, 1) - 1, 3) = arr
End Sub

Function bsort(arr, first, last, left, right, key)
  Dim i, j, k, t
  For i = first To last - 1
    For j = first To last + first - 1 - i
      If arr(j, key) > arr(j + 1, key) Then
        For k = left To right
          t = arr(j, k): arr(j, k) = arr(j + 1, k): arr(j + 1, k) = t
        Next
      End If
    Next
  Next
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-14 20:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
设置了一个用于排序的排序编码,对排序编码按降序排序即可
截图01.jpg

   排序编码=货码10000+色码10+型码
  其中: 货码就是货号的数字部分,色码就是条码中数字后的首个英文字母的CODE()函数,型码就是衣服号型(XS,S,M,L,XL,2XL,3XL,4XL)的人为编码。就本例而言用函数MATCH()定义。
   为便于理解,保留了辅助列。

排序问题.rar (17.23 KB, 下载次数: 5)



TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-15 09:06 | 显示全部楼层
rym9401 发表于 2020-7-14 14:50
不知道表述清楚否

谢谢老师的回复    这个很清楚  其实我是想vba来实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-15 09:17 | 显示全部楼层
一把小刀闯天下 发表于 2020-7-14 14:49
一楼你提供的附件中相同货号为同色,但图中并不是这样的

---------------

抱歉   老师  是我没有表述清楚

同色同号有序排列    XS,S,M,L,XL,2XL,3XL,4XL


排序问题.zip (23.96 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-15 09:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-15 09:21 | 显示全部楼层
sencak 发表于 2020-7-13 14:48
Range("a2:c" & Cells(Rows.Count, 1).End(3).Row).Sort , 1, [c2], , 1, , , , , , 1, 1

谢谢老师的回复
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 23:59 , Processed in 0.043496 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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