Выпадающий список с множественным выбором

Классический выпадающий список в листе Excel — это здорово, но он позволяет выбрать только один вариант из представленного набора. Иногда это именно то, что нужно, но бывают ситуации, когда пользователю необходимо иметь возможность выбора. некоторые элементы из списка.

Давайте рассмотрим несколько типичных реализаций такого списка с множественным выбором.

Вариант 1. Горизонтальный

Пользователь выбирает элементы из раскрывающегося списка один за другим, и они появляются справа от изменяемой ячейки, автоматически располагаясь горизонтально:

Раскрывающиеся списки в ячейках C2:C5 в данном примере создаются стандартным способом, т.е.

  1. выберите ячейки C2:C5
  2. вкладка или меню Данные выбрать команду проверка достоверности данных
  3. в открывшемся окне выберите вариант Список и укажите в качестве диапазона Источник ячейки с исходными данными для списка A1:A8

Затем вам нужно добавить в модуль листа макрос, который будет выполнять всю основную работу, т.е. добавлять выбранные значения справа от зеленых ячеек. Для этого щелкните правой кнопкой мыши по вкладке листа с раскрывающимися списками и выберите команду Исходный код. Вставьте следующий код в открывшееся окно редактора Visual Basic:

Private Sub Worksheet_Change(ByVal Target As Range) При ошибке возобновляется следующим, если не пересекается(Target, Range("C2:C5")) Ничего и Target.Cells.Count = 1 Тогда Application.EnableEvents = False Если Len(Target.Offset) (0, 1)) = 0 Тогда Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

При необходимости замените чувствительный диапазон раскрывающихся списков C2:C5 во второй строке этого кода на свой собственный.

Вариант 2. Вертикальный

То же, что и в предыдущей версии, но новые выбранные значения добавляются не справа, а снизу:

Делается это точно так же, но немного меняется код макроса-обработчика:

Private Sub Worksheet_Change(ByVal Target As Range) При ошибке возобновляется следующим, если не пересекается(Target, Range("C2:F2")) Ничего и Target.Cells.Count = 1 Тогда Application.EnableEvents = False Если Len(Target.Offset (1, 0)) = 0 Тогда Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

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

Вариант 3. С накоплением в одной ячейке

В этом варианте накопление происходит в той же ячейке, где расположен выпадающий список. Выбранные элементы разделяются любым заданным символом (например, запятой):

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

Private Sub Worksheet_Change(ByVal Target As Range) При ошибке возобновляется следующим, если не пересекается(Target, Range("C2:C5")) Ничего и Target.Cells.Count = 1 Тогда Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Тогда Target = Target & "," & newVal Else Target = newVal End Если Len(newVal) = 0 Тогда Target.ClearContents Application.EnableEvents = True End If Конец субтитра  

При желании можно заменить символ-разделитель (запятую) в 9-й строке кода на свой (например, пробел или точку с запятой).

  • Как создать простой раскрывающийся список в ячейке листа Excel
  • Выпадающий список с содержимым
  • Добавлен раскрывающийся список с отсутствующими опциями
  • Что такое макросы, как их использовать, куда вставлять код макроса в Visual Basic

Оставьте комментарий