使用 VBA 函数对单元格值中的数字进行排序

Sort the digits in the cell value using a VBA function

谁能帮我 VBA 代码。我想在 excel 中按升序和降序对数字进行排序,但要对单个单元格值进行排序。例如,如果用户在“A1”单元格中输入 5634,我希望“A2”中的结果为“3456”(即升序)和“A3”中的“6543”(即降序)。在 vba 这可能吗??

试试这个(把它放在 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”升序排序。

这不一定非常快,因为它涉及字符串操作(如果您有数千个单元格要计算,则可能无法很好地执行)。