Розкривний список із множинним вибором

Класичний розкривний список на аркуші Excel чудовий, але він дозволяє вибрати лише один варіант із представленого набору. Іноді це саме те, що ви хочете, але бувають ситуації, коли користувач повинен мати можливість вибору деякі елементи зі списку.

Давайте розглянемо декілька типових реалізацій такого списку множинного вибору.

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

Користувач вибирає елементи зі спадного списку один за одним, і вони з’являються праворуч від комірки, що змінюється, автоматично перераховуються горизонтально:

Випадаючі списки в клітинках C2:C5 у цьому прикладі створюються стандартним способом, тобто

  1. виділіть клітинки C2:C5
  2. вкладка або меню дані вибрати команду Перевірка достовірності даних
  3. у вікні, що відкриється, виберіть варіант список і вкажіть як діапазон Source комірки з вихідними даними для списку A1:A8

Потім потрібно додати в модуль листа макрос, який буде виконувати всю основну роботу, тобто додавати вибрані значення праворуч від зелених клітинок. Для цього клацніть правою кнопкою миші вкладку аркуша з розкривними списками та виберіть команду Вихідний код. Вставте наступний код у вікно редактора Visual Basic, яке відкриється:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If 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) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If 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) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Кінець Під  

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

  • Як створити простий спадний список у клітинці аркуша Excel
  • Випадаючий список із вмістом
  • Розкривний список із доданими відсутніми параметрами
  • Що таке макроси, як ними користуватися, куди вставляти код макросу у Visual Basic

залишити коментар