|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub 排序()
- Dim vData As Variant, vRow As Variant, vFill As Variant, nFill As Long, vKey As Variant, oDic As Object, nI As Long
-
- Set oDic = CreateObject("Scripting.Dictionary")
- vData = [G10:H19].Value
- For vRow = 1 To UBound(vData)
- vKey = vData(vRow, 2)
- If Not oDic.Exists(vKey) Then Set oDic(vKey) = CreateObject("Scripting.Dictionary")
- oDic(vKey)(vRow) = 0
- Next
- vKey = SortData(oDic.Keys())
- ReDim vFill(1 To UBound(vData), 1 To 2)
- For nI = LBound(vKey) To UBound(vKey)
- For Each vRow In oDic(vKey(nI)).Keys
- nFill = nFill + 1
- vFill(nFill, 2) = vData(vRow, 2)
- vFill(nFill, 1) = vData(vRow, 1)
- Next
- Next
- [J10].Resize(UBound(vFill), 2) = vFill
- End Sub
- Private Function SortData(ByVal vData As Variant) As Variant
- Dim nI As Double, nJ As Double, vTmp As Variant
-
- nJ = LBound(vData)
- For nI = LBound(vData) To UBound(vData) - 1
- If vData(nI) >= vData(nI + 1) Then
- If nI > nJ Then
- nJ = nI
- Else
- nI = nJ
- End If
- Else
- vTmp = vData(nI)
- vData(nI) = vData(nI + 1)
- vData(nI + 1) = vTmp
- If nI <> LBound(vData) Then nI = nI - 2
- End If
- Next nI
- SortData = vData
- End Function
复制代码 |
|