美文网首页
二维数组排序

二维数组排序

作者: 弓长_88c0 | 来源:发表于2019-10-03 20:53 被阅读0次

冒泡排序法的引申,由原先的一维数组排序变更为二维数组排序
excelhome网友的创作

可以先希尔排序

代码:

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

相关文章

网友评论

      本文标题:二维数组排序

      本文链接:https://www.haomeiwen.com/subject/axfjpctx.html