|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub micro排名()
- Dim vData As Variant, vRow As Variant, nIndex As Long
- Dim oDic As Object, vSex As Variant, vVal As Variant, dicTmp As Object
-
- Set oDic = CreateObject("Scripting.Dictionary")
-
- With Sheet1
- With .UsedRange
- vData = .Offset(1).Resize(.Rows.Count - 1, 6).Value
- End With
- For vRow = 1 To UBound(vData)
- vSex = Trim(vData(vRow, 1))
- vVal = Val(vData(vRow, 6))
- If Not oDic.Exists(vSex) Then Set oDic(vSex) = CreateObject("Scripting.Dictionary")
- If Not oDic(vSex).Exists(vVal) Then Set oDic(vSex)(vVal) = CreateObject("Scripting.Dictionary")
- oDic(vSex)(vVal)(vRow) = 0
- Next
- For Each vSex In oDic.Keys
- vVal = SortData(oDic(vSex).Keys())
- For nIndex = LBound(vVal) To UBound(vVal)
- Set dicTmp = oDic(vSex)(vVal(nIndex))
- oDic(vSex).Remove vVal(nIndex)
- Set oDic(vSex)(vVal(nIndex)) = dicTmp
- Next
- Next
- For Each vSex In oDic.Keys
- nIndex = 0
- For Each vVal In oDic(vSex).Keys
- nIndex = nIndex + 1
- For Each vRow In oDic(vSex)(vVal).Keys
- vData(vRow, 1) = vSex & "-" & nIndex
- Next
- Next
- Next
- .[L2].Resize(UBound(vData)) = vData
- End With
- End Sub
- Private Function SortData(ByVal vKey As Variant) As Variant
- Dim nI As Double, nJ As Double, vTmp As Variant
-
- nJ = LBound(vKey)
- For nI = LBound(vKey) To UBound(vKey) - 1
- If vKey(nI) >= vKey(nI + 1) Then
- If nI > nJ Then
- nJ = nI
- Else
- nI = nJ
- End If
- Else
- vTmp = vKey(nI)
- vKey(nI) = vKey(nI + 1)
- vKey(nI + 1) = vTmp
- If nI <> LBound(vKey) Then nI = nI - 2
- End If
- Next nI
- SortData = vKey
- End Function
复制代码 |
|