举个排序的例子,要对A1:A20的单元格区域进行排序,区域内的内容为1-100的随机整数, 规则是大于50的倒序排列,小于50的正序排列。将结果显示在B1:B20的区域里。
在这个例子中,首先定义一个Sub过程来随机生成A1:A20区域的内容。 代码如下:
' 创建随机整数,并赋值Sub cateRandom(times As Integer) Dim num As Integer Dim arr() As Integer Dim arr(times) For num = 1 To times Randomize (1) ' 初始化随机数 arr(num) = Rnd(1) * 10000 100 ' Rnd随机数函数生成0~1的浮点数 ' 上面使用了运算符进行取整,也可以根据需求使用vba内部的取整函数达到同样的效果 ' arr(num) = Int(Rnd(1) * 100) ' arr(num) = Round(Rnd(1) * 100) Range("A" & num) = arr(num) Next numEnd Sub' 自定义排序Function defSort(rgs) As Variant Dim arr() As Integer Dim total As Integer Dim rg Dim st As Integer ' 数组开始标记 Dim ed As Integer ' 数组结束标记 Debug.Print "rgs类型:"; TypeName(rgs) total = UBound(rgs) Dim arr(total) st = 1 ed = total ' 对数组分区 For Each rg In rgs If rg 50 Then arr(ed) = rg ed = ed - 1 Else arr(st) = rg st = st + 1 End If Next rg Dim i As Integer Dim j As Integer Dim tmp As Integer ' 冒泡排序 For i = 1 To total For j = i To total If arr(i) 50 And arr(j) 50 Then '大于50的倒序排列 If arr(i) < arr(j) Then tmp = arr(i) arr(i) = arr(j) arr(j) = tmp Debug.Print "大于50的"; i; j; tmp ' 程序运行过程中在立即窗口显示执行内容,用于调试程序 End If Else If arr(i) <= 50 And arr(j) <= 50 Then ' 小于50的正序排列 If arr(i) arr(j) Then tmp = arr(i) arr(i) = arr(j) arr(j) = tmp Debug.Print "不大于50的"; i; j; tmp End If Else Exit For End If Next j Next i defSort = arnd Function' 程序入口Sub main() Const SORT_NUM = 20 Dim rgs Dim arr cateRandom SORT_NUM ' 初始化待排序区域 rgs = range("A1:A" & SORT_NUM) arr = defSort(rgs) ' 循环赋值 For i = 1 To SORT_NUM range("B" & i) = arr(i) Next iEnd Sub
神器放送
VBA编程神器 VBA代码助手 可以极大提高编程速度,降低编程门槛欢迎使用
私信回复 代码助手 即可获得
用法 输入 字典+空格 即可看到如下提示 也可输入 dic+空格 zd+空格 均可得到提示
本提示数据库可完全自定义!
更多功能请大家探索