Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6109|回复: 13

[已解决]单元格内容排序

[复制链接]
发表于 2017-3-27 17:46 | 显示全部楼层 |阅读模式
本帖最后由 france723 于 2017-3-28 20:21 编辑

如图所示, 单元格内容 I1,I10,I2,I3,I4,I9 排序混乱
想实现,单元格内容升序排序 I1,I2,I3,I4,I9,I10
如果单元格内容变化, 程序一样使用
最佳答案
2017-3-28 14:37
B1=px(A1)
  1. Function px(x, n)   'x为要排序的字符,n为数字前字母的个数
  2.     xrr = Split(x, ",")
  3.     Dim arr()
  4.     For i = 0 To UBound(xrr)
  5.         s = Val(Mid(xrr(i), n + 1))
  6.         If s > maxs Then
  7.             maxs = s
  8.             ReDim Preserve arr(s)
  9.         End If
  10.         arr(s) = xrr(i)
  11.     Next
  12.     For i = 0 To maxs
  13.         If arr(i) <> "" Then px = px & "," & arr(i)
  14.     Next
  15.     px = Mid(px, 2)
  16. End Function
复制代码
Capture.PNG
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-3-28 12:41 | 显示全部楼层
回复

使用道具 举报

发表于 2017-3-28 14:37 | 显示全部楼层    本楼为最佳答案   
B1=px(A1)
  1. Function px(x, n)   'x为要排序的字符,n为数字前字母的个数
  2.     xrr = Split(x, ",")
  3.     Dim arr()
  4.     For i = 0 To UBound(xrr)
  5.         s = Val(Mid(xrr(i), n + 1))
  6.         If s > maxs Then
  7.             maxs = s
  8.             ReDim Preserve arr(s)
  9.         End If
  10.         arr(s) = xrr(i)
  11.     Next
  12.     For i = 0 To maxs
  13.         If arr(i) <> "" Then px = px & "," & arr(i)
  14.     Next
  15.     px = Mid(px, 2)
  16. End Function
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-3-28 17:43 | 显示全部楼层

老师, 对于我的这个问题, 您给我的代码无需改动, 还是要相应变换
我没有相应变换您给我的代码, 在A2单元格输入=px A1, 提示错误
我是新手, 希望老师帮忙

回复

使用道具 举报

 楼主| 发表于 2017-3-28 17:47 | 显示全部楼层
蓝桥玄霜 发表于 2017-3-28 12:41
B1=px(A1)
请见代码。

老师, 您给我的代码截图里面没有px函数阿, 没有看懂 , 希望老师解释一下,我是新手
回复

使用道具 举报

发表于 2017-3-28 18:00 | 显示全部楼层
france723 发表于 2017-3-28 17:47
老师, 您给我的代码截图里面没有px函数阿, 没有看懂 , 希望老师解释一下,我是新手

自定义函数,需要你把代码Copy进去再写这个函数
回复

使用道具 举报

 楼主| 发表于 2017-3-28 18:17 | 显示全部楼层
本帖最后由 france723 于 2017-3-28 21:02 编辑
Excel学徒123 发表于 2017-3-28 18:00
自定义函数,需要你把代码Copy进去再写这个函数


回复

使用道具 举报

发表于 2017-3-28 19:59 | 显示全部楼层
做了个附件

工作簿1.rar

12.58 KB, 下载次数: 16

回复

使用道具 举报

 楼主| 发表于 2017-3-28 20:21 | 显示全部楼层
本帖最后由 france723 于 2017-3-28 20:58 编辑

谢谢大神, 如果就在A1本身生成, 替换原有的错误顺序,如何实现?
回复

使用道具 举报

发表于 2017-3-28 21:40 | 显示全部楼层
在A列单元格中改动,会自动排序。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Count > 1 Then Exit Sub
  3.     If Target.Column > 1 Then Exit Sub
  4.     Application.EnableEvents = False
  5.     If Target = "" Then Exit Sub
  6.     For n = 1 To Len(Target)
  7.         If Mid(Target, n, 1) Like "[0-9]" Then Exit For
  8.     Next
  9.     Target = px(Target, n - 1)
  10.     Application.EnableEvents = True
  11. End Sub
复制代码

工作簿1.rar

12.58 KB, 下载次数: 20

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 15:04 , Processed in 0.473297 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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