Как создать раскрывающийся список с множественным выбором в Excel
Когда пользователям нужно выбрать несколько вариантов, но они могут ошибаться или передумать в процессе выбора, выпадающее меню с множественным выбором, которое позволяет удалить неправильные элементы, может быть спасением.
Рассмотрим сценарий, в котором вам нужно назначить несколько задач членам команды с помощью раскрывающегося списка. С функциями Excel по умолчанию единственный способ удалить неправильно назначенную задачу — очистить все содержимое ячейки и начать заново. Имея возможность удалять отдельные элементы из выбора, команда может легко изменять назначения задач без путаницы или ошибок.
Приведенный ниже код реализует функцию удаления элемента простым и интуитивно понятным способом: первый щелчок по элементу добавляет его к выборке, а второй щелчок по тому же элементу удаляет его из выбора.
Код VBA для создания раскрывающегося списка с множественным выбором, который позволяет удалять выбранные элементы
Опция Explicit Private Sub Worksheet_Change(ByVal Destination As Range) Dim rngDropdown As Range Dim oldValue As String Dim newValue As String Dim DelimiterType As String DelimiterType = «,» Dim DelimiterCount As Integer Dim TargetType As Integer Dim i As Integer If Destination.Count > 1 Затем выйдите из подпрограммы при ошибке. Возобновите следующий набор. rngDropdown = Cells.SpecialCells(xlCellTypeAllValidation) При ошибке. Application.ScreenUpdating = False Application.EnableEvents = False newValue = Destination.Value Application.Undo oldValue = Destination.Value Destination.Value = newValue If oldValue <> «» Then If newValue <> «» Then If oldValue = newValue or oldValue = newValue & Replace(DelimiterType, » «, «») Or oldValue = newValue & DelimiterType Then ‘ оставить значение, если в списке есть только одно oldValue = Replace(oldValue, DelimiterType, «») oldValue = Replace(oldValue, Replace(DelimiterType , » «, «»), «») Destination.Value = oldValue ElseIf InStr(1, oldValue, DelimiterType и newValue) Then oldValue = Replace(oldValue, newValue, «») ‘удаляет существующее значение из списка при выборе это снова Destination.Value = oldValue ElseIf InStr(1, oldValue, newValue & Replace(DelimiterType, » «, «»)) Then oldValue = Replace(oldValue, newValue, «») Destination.Value = oldValue Else Destination.Value = oldValue & DelimiterType & newValue End If Destination.Value = Replace(Destination.Value, Replace(DelimiterType, » «, «») & Replace(DelimiterType, » «, «»), Replace(DelimiterType, » «, «»)) ‘ удалить лишние запятые и пробелы Destination.Value = Replace(Destination.Value, DelimiterType & Replace(DelimiterType, » «, «»), Replace(DelimiterType, » «, «»)) If Destination.Value <> «» Then If Right (Destination.Value, 2) = DelimiterType Then ‘ удалить запятую и пробел в конце Destination.Value = Left(Destination.Value, Len(Destination.Value) — 2) End If End If InStr(1, Destination.Value, DelimiterType) = 1 Then ‘ удалить запятую и пробел в качестве первых символов Destination.Value = Replace(Destination.Value, DelimiterType, «», 1, 1) End If InStr(1, Destination.Value, «,») = 1 Then ‘ удалить запятую в качестве первого символа Destination.Value = Replace(Destination.Value, Replace(DelimiterType, » «, «»), «», 1, 1) End If DelimiterCount = 0 For i = 1 To Len(Destination.Value) If InStr(i, Destination.Value, Replace(DelimiterType, » «, «»)) Then DelimiterCount = DelimiterCount + 1 End If Next i If DelimiterCount = 1 Then ‘ удалить запятую, если последний символ Destination.Value = Replace(Destination.Value , DelimiterType, «») Destination.Value = Replace(Destination.Value, Replace(DelimiterType, » «, «»), «») End If End If End If Application.EnableEvents = True Application.ScreenUpdating = True End If exitError: Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
В приведенной ниже демонстрации показано, как раскрывающийся список множественного выбора с функцией удаления работает в Excel. Пользователи могут выбирать несколько параметров из списка проверки данных и вносить коррективы на лету. Оптимизированный и эффективный подход к управлению выборами!