excel 一个单元格内一组数据自动从小到大排列的问题

如何实现将A列的数据自动转为B列的从小到大的新数值
A列 B列
01 06 11 07 03 01 03 06 07 11
10 07 05 09 01 01 05 07 09 10
01 03 06 11 10 01 03 06 10 11
07 02 05 08 10 02 05 07 08 10

在B1单元格输入如下公式后下拉:
=TEXT(SMALL(--MID(A1,{1,4,7,10,13},2),1),"00")&" "&TEXT(SMALL(--MID(A1,{1,4,7,10,13},2),2),"00")&" "&TEXT(SMALL(--MID(A1,{1,4,7,10,13},2),3),"00")&" "&TEXT(SMALL(--MID(A1,{1,4,7,10,13},2),4),"00")&" "&TEXT(SMALL(--MID(A1,{1,4,7,10,13},2),5),"00")
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-11
B1=TEXT(SUM(SMALL(--MID(A1,(ROW($1:$5)-1)*3+1,2),ROW($1:$5))*10^{8;6;4;2;0}),REPT("00 ",5))
数组公式,按Ctrl+Shift+Enter结束公式输入,向下复制公式。
第2个回答  2013-01-11
假定A为一个矩5*5矩阵,转换成B型式的矩阵,B从F1至J5
在F1内输入
=SMALL($A$1:$E$1,column()-5)
按CTRL+SHIFT+ENTER
再向右拖至J列,
在第2行,将上式公式中的1改成2
第3行改成3,依次即可
第3个回答  2013-01-11
这要使用宏自定义函数的。来自:求助得到的回答
第3个回答  2013-01-11
把以下代码粘贴到VBA模块中
Function mymin(rng As Range)
Dim arr, k
arr = Split(rng, " ")
For x = 0 To UBound(arr) - 1
For y = x + 1 To UBound(arr)
If arr(x) > arr(y) Then
k = arr(x)
arr(x) = arr(y)
arr(y) = k
End If
Next y
Next x
mymin = Join(arr, " ")
End Function

B1输入公式=mymin(a1)
公式下拉完成
以下代码是直接运行就得到结果
Sub test()
Dim arr, brr, x&, y&, i&, k
arr = Range("A1:A" & Range("A65536").End(xlUp).Row)
For x = 1 To UBound(arr)
brr = Split(arr(x, 1), " ")
For y = 0 To UBound(brr) - 1
For i = y + 1 To UBound(brr)
If brr(y) > brr(i) Then
k = brr(y)
brr(y) = brr(i)
brr(i) = k
End If
Next i
Next y
arr(x, 1) = Join(brr, " ")
Next x
Range("B1").Resize(UBound(arr)) = arr
End Sub

以上两种方法的代码完成,可以不限制A列的数据是5组。追问

弱弱的问,vba模块在哪?俺只是中级菜鸟。你的这个对我实在是太高深了。

追答

按Alt+F11打开VBA编辑器,在左边栏右键插入模块,把代码粘贴到右边的编辑栏中即可
方括号老师的公式挺好的,你的数字有几组就把那个5改为几就行了。注意是数组公式

第4个回答  2013-01-11
向高手学习VBA代码