Класическият падащ списък в Excel лист е страхотен, но ви позволява да изберете само една опция от представения набор. Понякога това е точно това, което искате, но има ситуации, в които потребителят трябва да може да избира някакъв елементи от списъка.
Нека да разгледаме няколко типични реализации на такъв списък с множество избори.
Вариант 1. Хоризонтален
Потребителят избира елементи от падащия списък един по един и те се показват отдясно на клетката, която се променя, като автоматично се изброяват хоризонтално:
Падащите списъци в клетки C2:C5 в този пример се създават по стандартен начин, т.е
- изберете клетки C2:C5
- раздел или меню Дата изберете екип Потвърждаване на данните
- в прозореца, който се отваря, изберете опция списък и посочете като диапазон източник клетки с изходни данни за списък 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