任何人都可以幫助我使用 VBA 代碼。我想在excel中按升序和降序對數字進行排序,但只有一個單元格值。例如,如果用戶在“A1”單元格中輸入 5634,我希望“A2”中的結果為“3456”(即升序)和“A3”中的“6543”(即降序)。這在vba中可能嗎?
uj5u.com熱心網友回復:
試試這個(把它放在一個 VBA 代碼模塊中):
Public Function SortDigits(NumberIn As Variant, Optional SortOrder As Variant) As Variant
Dim InVal As String, i As Integer, j As Integer, TempVal As String
Dim bSortOrderAsc As Boolean
SortDigits = CVErr(xlErrNull)
If IsMissing(SortOder) Then
bSortOrderAsc = True
ElseIf SortOrder = "A" Then
bSortOrderAsc = True
ElseIf SortOrder = "D" Then
bSortOrderAsc = False
Else
SortDigits = CVErr(xlErrValue)
Exit Function
End If
If IsNumeric(NumberIn) Then
InVal = CStr(NumberIn)
For i = 1 To Len(InVal) - 1
For j = i 1 To Len(InVal)
If (bSortOrderAsc And Mid(InVal, i, 1) > Mid(InVal, j, 1)) Or _
(Not bSortOrderAsc And Mid(InVal, i, 1) < Mid(InVal, j, 1)) Then
'if Ascending order, this is wrong, swap them
TempVal = Mid(InVal, i, 1)
Mid(InVal, i, 1) = Mid(InVal, j, 1)
Mid(InVal, j, 1) = TempVal
End If
Next j
Next i
SortDigits = InVal
Else
SortDigits = CVErr(xlErrNum)
End If
End Function
并從excel單元格呼叫如下:
=SortDigits(A1,"D")
其中 A1 是您要對數字進行排序的單元格。省略第二個引數或使用“A”按升序排序。
這不一定非常快,因為它涉及字串操作(如果要計算數千個單元格,可能性能不佳)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467227.html
