在单个单元格中按字母顺序排序分隔的字符串

时间:2011-05-31 20:16:42

标签: sorting excel-vba vba excel

我使用以下代码从数据验证单元格中选择多个项目。它可以工作,但我需要对单元格中的条目进行排序,这样不管梨,苹果,橙子,结果都是苹果,橙子,梨,无论用户从下拉列表中选择的顺序如何。

这也很好(但没有必要检查重复。感谢您的帮助!急需![/ p>

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

1 个答案:

答案 0 :(得分:0)

如果不进入各种排序算法,您可以暂时将值存储在工作表的某个范围内,然后使用该范围,使用代码中的[range].sort()函数对范围进行排序。排序后,您可以将它们读回Target.Value单元格,然后随时分隔它们。

要删除重复项,在对范围进行排序之后,但在将其读回target.value之前,迭代遍历范围中的每个单元格,如果单元格等于下面的单元格,则删除并移动值