设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[Excel技巧] 用数组公式和自定义函数对单元格内的数字排序

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-10 10:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假如Excel工作表的A1单元格中包含某个数字,如“987650056789”,要将各位数字按从小到大顺序排列,即得到“005566778899”,通常可以用数组公式或自定义函数:
    如果单元格内的数字不超过15为,可使用下面的数组公式将数字按从小到大的顺序排列,在B1单元格中输入:
    =TEXT(SUM(SMALL(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),ROW(INDIRECT("1:"&LEN(A1))))*10^(LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))))),REPT("0",LEN(A1)))
    注意需按Ctrl+Shift+Enter结束输入。如果要将数字按从大到小的顺序排列,可将“SMALL”改为“LARGE”函数。受数字精度的限制,如果单元格内的数字超过15位,可能得不到正确的结果。而使用自定义函数则可用于较长的文本形式的数字。
    按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,在代码窗口粘贴下列代码:
Function SortNumsInCell(num As String, Optional order As Boolean) As String
Dim Str As String
For i = 0 To 9
  For j = 1 To UBound(Split(num, i))
    Str = IIf(order, i & Str, Str & i)
  Next
Next
SortNumsInCell = Str
End Function
    上述代码定义了一个自定义函数,它有两个参数,第一个为单元格内的数字或直接输入的数字,第二个参数为“0”或省略时指定按从小到大的顺序排列,为“1”时则相反。关闭VBA编辑器,返回Excel界面,在B1中输入公式:
    =sortnumsincell(A1)
    即可得到按从小到大排列的数字。如果输入:
    =sortnumsincell(A1,1)
    则返回从大到小顺序排列的数字。
回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-4-28 01:31 , Processed in 0.169717 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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