在单个单元格中按字母顺序对定界字符串进行排序

问题描述

| 我正在使用以下代码从数据验证单元中选择多个项目。它可以工作,但是我需要对单元格中的条目进行排序,以便无论用户从下拉列表中选择的顺序如何,结果都不会是梨,苹果,橙子,而是苹果,橙子,梨。 这也将很好(但不必检查重复项。感谢您的帮助!迫切需要!
Option Explicit
\' Developed by Contextures Inc.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is nothing Then GoTo exitHandler

If Intersect(Target,rngDV) Is nothing Then
   \'do nothing
Else
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal
  If Target.Column = 3 Then
    If oldVal = \"\" Then
      \'do nothing
      Else
      If newVal = \"\" Then
      \'do nothing
      Else
      Target.Value = oldVal _
        & \",\" & newVal
      End If
    End If
  End If
End If

exitHandler:
  Application.EnableEvents = True
End Sub
    

解决方法

        无需使用各种排序算法,您就可以将值临时存储在工作表中的某个范围内,然后使用该范围,并在代码中使用
[range].sort()
函数对范围进行排序。排序后,您将它们读回到
Target.Value
单元格中,并随即对它们进行定界。 要删除重复项,请在对范围进行排序之后但在将其读回到
target.value
之前,遍历范围中的每个单元格,然后删除并向上移动值(如果该单元格等于其下一个单元格)。