EXCEL VBA中处理数字型字符串的一个稍微复杂问题

大神,打扰一下,EXCEL VBA中处理数字型字符串的一个稍微复杂问题?

问题是这样的:
在A1:O10这片区域中不规则地分布着一些3位数的数字型字符串,数目不定,现在需要将它们先进行内部从小到大排序,例如"162"排成"126","905"排成"059",然后将它们互相比较,去掉重复的,最后按从小到大依次排列,整齐地重新从A1开始按每行15个存放。
我设想用数组来解决这个问题。
第一步,将区域中凡不为空的单元格的数据赋予一个数组。
第二步,将这个数组的元素进行内部排序,如“162”排成“126”。
第三步,将这个数组的元素互相比较,去掉重复的,并从小到大排列。
第四步,将处理完的数组元素从A1开始整齐排列。
我遇到的困难在第二步和第三步,首先内部排序不会弄,不知有没有现成的内部函数能解决这个问题?第三步中去掉重复元素,似乎涉及到删除数组元素的语法,我也不会。
各位热心朋友,我热切期待你们的指点和帮助!
另外还有一个问题:如何声明一个元素数量不定的数组?
最新回答
星星泡饭

2024-11-26 09:10:31

Sub ping()
Dim x As String
Dim aaa(1 To 999)
Dim bbb(1 To 10, 1 To 15) As String
Set xxx = [a1:O10]
For Each xx In xxx
If Val(xx) = 0 Then GoTo 100
x = ""
For t1 = 0 To 9
For t2 = 1 To 3
If Mid(xx, t2, 1) = Trim(t1) Then
x = x & t1
End If
Next
Next
aaa(x) = x
100:
Next
r = 1
c = 0
For Each aa In aaa
If Not IsEmpty(aa) Then
c = c + 1
If c > 15 Then
c = 1
r = r + 1
End If
bbb(r, c) = aa
End If
Next
[a12].Resize(10, 15) = bbb
End Sub

以上的VBA, 不计算 空格 及 "000"
如需保留"000", VBA需加多几行

重新排列放在A12开始, 以免覆盖原有数据
如坚持从A1开始排列, 最后1句
[a12].Resize(10, 15) = bbb
改成:
xxx.Value = bbb

声明数组, 在变数后加() 如 xxx()←代表不定量
声明一维数组(如100个), xxx(1 To 100)
声明二维数组(如10行,15列), xxx(1 To 10, 1 to 15)
如肯定是15列, 但不知多少行, 那就写多几行, 不要写少
但要注意, 二维数组一定是矩形的, 不可在右下方少一个角
程序中, 我除了声明 aaa, bbb是数组外, 最后一句用了resize VBA函数亦设了一个数组
[a12].Resize(10, 15)←即代表A12:O21

希望楼主能吸收, 领悟 及代入到你的文件上使用, 当然要用心及花一点时间