Падащ списък с множествен избор

Класическият падащ списък в Excel лист е страхотен, но ви позволява да изберете само една опция от представения набор. Понякога това е точно това, което искате, но има ситуации, в които потребителят трябва да може да избира някакъв елементи от списъка.

Нека да разгледаме няколко типични реализации на такъв списък с множество избори.

Вариант 1. Хоризонтален

Потребителят избира елементи от падащия списък един по един и те се показват отдясно на клетката, която се променя, като автоматично се изброяват хоризонтално:

Падащите списъци в клетки C2:C5 в този пример се създават по стандартен начин, т.е

  1. изберете клетки C2:C5
  2. раздел или меню Дата изберете екип Потвърждаване на данните
  3. в прозореца, който се отваря, изберете опция списък и посочете като диапазон източник клетки с изходни данни за списък 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 If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If End Sub  

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

  • Как да създадете прост падащ списък в клетка на лист на Excel
  • Падащ списък със съдържание
  • Падащ списък с добавени липсващи опции
  • Какво представляват макросите, как да ги използвате, къде да вмъкнете макро код във Visual Basic

Оставете коментар