|
最近工作需要,想了解一下数组的排序(不是指用excel的sort方法),于是硬着头皮研究了一下冒泡排序法,
但网上的案例多半是单列排序,可实际工作上基本上是二维数据库的整体排序。
于是经过变通,在单列冒泡法的基础上略做改动,即可直接在内存数组中完成排序。
废话少说,上代码:
- Sub SortUP_HaoNai()
- Dim DataResource() '定义数据源数组
- DataResource = Sheets("数据源").[A2].Resize(19, 6).Value '读取数据源,可根据需要随便整些模拟数据
- Dim Arr()
- ReDim Arr(1 To UBound(DataResource), 1 To 2) '建立二列(排序关键字+原顺序的索引值)的二维数据用于排序
- For I = 1 To UBound(DataResource)
- Arr(I, 1) = DataResource(I, 6) '本处排序关键字位于第6列
- Arr(I, 2) = I '记录原顺序索引值
- Next
- Dim TempDataKeyWord '建立临时变量存储排序过程中的关键字的值
- Dim TempDataIndex '建立临时变量存储排序过程中的关键字对应的索引值
- For I = 1 To UBound(Arr) - 1 '冒泡排序法,对单列关键字排序的同时,对索引值也相应更新位置
- For J = I + 1 To UBound(Arr)
- If Arr(I, 1) > Arr(J, 1) Then '升序排列,如果要降序,直接将大于号换成小于号即可
- TempDataKeyWord = Arr(I, 1): TempDataIndex = Arr(I, 2)
- Arr(I, 1) = Arr(J, 1): Arr(I, 2) = Arr(J, 2)
- Arr(J, 1) = TempDataKeyWord: Arr(J, 2) = TempDataIndex
- End If
- Next
- Next
- Dim NewData() '定义排序后的新数组
- NewData = [DataResource] '不想多写代码建立同样大小的二维矩阵,直接等同即建立同样大小的数组
- For I = 1 To UBound(Arr) '再通过循环之前排好序的两列数据中索引值,将原数组重新按新顺序排列
- For J = 1 To UBound(DataResource, 2)
- NewData(I, J) = DataResource(Arr(I, 2), J)
- Next
- Next
- [A2].Resize(19, 6) = NewData() '输出数据
- End Sub
复制代码
个人想法,仅供初学者套用与帮助理解。
欢迎大师指点! |
评分
-
1
查看全部评分
-
|