使用 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”升序排序。
这不一定非常快,因为它涉及字符串操作(如果您有数千个单元格要计算,则可能无法很好地执行)。
谁能帮我 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”升序排序。
这不一定非常快,因为它涉及字符串操作(如果您有数千个单元格要计算,则可能无法很好地执行)。