Сортировать строку с разделителями в алфавитном порядке в одной ячейке - PullRequest
0 голосов
/ 01 июня 2011

Я использую следующий код для выбора нескольких элементов в ячейке проверки данных.Это работает, но мне нужно отсортировать записи в ячейке так, чтобы вместо получения груш, яблок, апельсинов результатом были яблоки, апельсины, груши, независимо от того, в каком порядке пользователь выбирает их из выпадающего списка.

Было бы неплохо (но не обязательно проверять дубликаты. Спасибо за помощь! Нужно срочно!

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 голосов
/ 03 июня 2011

Не вдаваясь в различные алгоритмы сортировки, вы можете временно сохранить значения в диапазоне на рабочем листе, а затем, используя этот диапазон, использовать функцию [range].sort() в своем коде для сортировки диапазона.После сортировки вы читаете их обратно в ячейку Target.Value, разделяя их по ходу.

Чтобы удалить дубликаты, после того, как диапазон был отсортирован, но до того, как он будет прочитан обратно в target.value, выполните итерацию по каждомуячейку в диапазоне и удалите и сдвиньте значения вверх, если ячейка равна ячейке под ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...