VBA表格问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 20:06:15
数据 结果
102008795.3832790 01,12,02,00,08,79,57,59,38,33,27,29,
55776722.9043673 55,57,67,77,22,29,04,03,34,36,37,
69449082.7181007 69,46,49,04,09,28,78,27,18,11,00,07,
90361404.0193091 09,39,03,16,46,14,04,00,19,13,01,
115213984.5547300 11,15,12,23,13,89,49,48,55,45,37,07,03,
25087844.0386644 25,02,05,78,88,44,04,38,36,68,46,
3366056.7151881 33,36,06,56,05,67,16,17,15,58,18,
19193512.9663467 19,11,39,59,35,12,29,66,36,46,47,67,
120461288.5158850 12,01,02,46,14,16,28,88,15,55,58,
39585475.8373554 39,35,59,58,48,45,57,78,37,33,55,
122964406.0260950 12,22,69,49,46,04,06,02,26,09,05,59,
Excel表格问题要求如下:
1. 假定“数据”在A列一直往下,“结果”在B列一直往下
2. A列数据的数字以三位为界限,转换成为两码组合(也就是每三位,自动组合成为两码,去除重复的,反应在旁边B列相对应的单元格,(比如上边的第一个“数据”的前三位是“102”结果就是01,12,02,紧接着是“008”就是00,08,“795”就是79,57,59,)...........................)
3. “数据”的数字是一直往下的,所以“结果”也就一直跟随往下
4. 以上说“数据”是假定在A列,实际“数据”在M.O.Q.S.U.W.Y.AA.AC.AE列 都有,共十列,所

你数字中的小数点忽略吗?
数字长度不是三的倍数怎么处理?
***************
做个自定义函数
按下ALT+F11,复制下面代码退出.
然后在B1输入
=ORDER(A1)
然后向下填充公式.

Public Function order(ByVal n As String) As String
Dim b() As String
Dim c() As String
a = Int(Len(n) / 3)
ReDim b(1 To a * 3) As String
ReDim c(1 To a) As String
n = Replace(n, ".", "")
For x = 1 To a
c(x) = Mid(n, (x - 1) * 3 + 1, 3)
Next
For x = 1 To a
b((x - 1) * 3 + 1) = Left(c(x), 1) & Mid(c(x), 2, 1)
b((x - 1) * 3 + 2) = Mid(c(x), 2, 1) & Right(c(x), 1)
b(3 * x) = Right(c(x), 1) & Left(c(x), 1)
Next
For x = 1 To UBound(b)
For y = x + 1 To UBound(b)
If b(x) = b(y) Then
b(y) = A
End If
Next
Next
order = Join(b, ",")
order = Replace(order, ",A", "")
End Function

有两个疑问:

1、每三位,自动组合成为两码,有没有顺序限制?例如“102”结果就是01,12,02,20,21,10?

2、结果同用逗号 分开存在右边的列中