For X = 起限 To 迄限
原始一維陣列(X) = 原始一維陣列副本(索引陣列(X))
Next X
End Sub
Public Sub S_二維陣列依自訂清單穩定排序_01(ByRef 原始二維陣列 As Variant, ByVal 排序維度 As Long, ByVal 排序鍵值 As Long, Optional ByVal 起限 As Variant, Optional ByVal 迄限 As Variant, Optional ByVal 自訂清單陣列 As Variant)
On Error Resume Next
If IsMissing(起限) Or Not IsNumeric(起限) Then
起限 = LBound(原始二維陣列, 排序維度)
Else
起限 = Fix(起限)
If 起限 < LBound(原始二維陣列, 排序維度) Then
起限 = LBound(原始二維陣列, 排序維度)
End If
End If
If IsMissing(迄限) Or Not IsNumeric(迄限) Then
迄限 = UBound(原始二維陣列, 排序維度)
Else
迄限 = Fix(迄限)
If 迄限 > UBound(原始二維陣列, 排序維度) Then
迄限 = UBound(原始二維陣列, 排序維度)
End If
End If
If 排序維度 = 1 Then
For X = 起限 To 迄限
For Y = LBound(原始二維陣列, 2) To UBound(原始二維陣列, 2)
原始二維陣列(X, Y) = 原始二維陣列副本(索引陣列(X), Y)
Next Y
Next X
Else
For Y = 起限 To 迄限
For X = LBound(原始二維陣列, 1) To UBound(原始二維陣列, 1)
原始二維陣列(X, Y) = 原始二維陣列副本(X, 索引陣列(Y))
Next X
Next Y
End If
End Sub
Private Sub 一維陣列依自訂清單穩定排序(ByRef 原始一維陣列 As Variant, ByRef 索引陣列() As Long, ByVal 起限 As Long, ByVal 迄限 As Long, ByVal 自訂清單陣列 As Variant)
ReDim 不重複自訂清單陣列(0 To UBound(自訂清單陣列) - LBound(自訂清單陣列)) As Variant
Set 自訂清單數量字典 = CreateObject("Scripting.Dictionary")
N = -1
For X = LBound(自訂清單陣列) To UBound(自訂清單陣列)
If Not 自訂清單數量字典.Exists(自訂清單陣列(X)) Then
N = N + 1
不重複自訂清單陣列(N) = 自訂清單陣列(X)
自訂清單數量字典(自訂清單陣列(X)) = 0 '數量初始化
End If
Next X
For X = 起限 To 迄限
If 自訂清單數量字典.Exists(原始一維陣列(X)) Then
自訂清單數量字典(原始一維陣列(X)) = 自訂清單數量字典(原始一維陣列(X)) + 1 '相同元素的數量
索引陣列(X) = 自訂清單數量字典(原始一維陣列(X)) '相同元素的相對次序
Else
自訂清單數量字典("Key_Not_Exist") = 自訂清單數量字典("Key_Not_Exist") + 1 '相同元素的數量
索引陣列(X) = 自訂清單數量字典("Key_Not_Exist") '相同元素的相對次序
End If
Next X
For X = 起限 To 迄限
If 自訂清單數量字典.Exists(原始一維陣列(X)) Then
索引陣列(X) = 起限 - 1 + 自訂清單累積數量字典(原始一維陣列(X)) + 索引陣列(X) '元素的陣列次序
Else
索引陣列(X) = 起限 - 1 + 自訂清單累積數量字典("Key_Not_Exist") + 索引陣列(X) '元素的陣列次序
End If
Next X