Оглавление
В зависимости от обстоятельств вам может понадобиться выбрать несколько значений в раскрывающемся списке. В этом уроке мы покажем вам, как сделать множественный выбор в раскрывающемся списке. Для этого урока мы используем Excel 2019, не стесняйтесь использовать вашу предпочтительную версию.
Прежде чем погрузиться в сессию, давайте познакомимся с набором данных, который является основой для наших примеров.
Здесь у нас есть несколько канцелярских элементов, с их помощью мы создадим выпадающий список и выберем в нем несколько элементов.
Обратите внимание, что это простой набор данных, чтобы не усложнять ситуацию. В практическом сценарии вы можете столкнуться с гораздо большим и сложным набором данных.
Практическая рабочая тетрадь
Вы можете скачать рабочую тетрадь по практике по ссылке ниже.
Сделать множественный выбор из выпадающего списка.xlsm
Множественный выбор в раскрывающемся списке
Прежде всего, нам нужно создать выпадающий список на основе наших канцелярий. Давайте быстро создадим его. Не стесняйтесь посетить статью о создании выпадающего списка.
В Валидация данных в диалоговом окне выберите СПИСОК тип данных и вставьте диапазон ячеек с элементами.
B4:B11 это диапазон, в котором хранятся элементы канцелярских принадлежностей. Теперь вы найдете выпадающий список.
Читать далее: Выпадающий список Excel в зависимости от выбора
1. выбор нескольких элементов (позволяет дублировать выбор)
В обычном выпадающем списке всегда выбирается один элемент. Здесь вы можете видеть, что мы выбрали Ручка из списка (изображение ниже).
Теперь, если мы выберем другой элемент, допустим. Карандаш
тогда оно заменит предыдущее значение. Только Карандаш останется выбранным.
Чтобы выбрать несколько элементов, нам нужно воспользоваться функцией VBA код. открыть Microsoft Visual Basic для приложений окно (нажмите ALT + F11 чтобы открыть его).
Теперь дважды щелкните по имени или номеру рабочего листа, где вы хотите выбрать несколько элементов в раскрывающемся списке. Вы увидите окно кода для этого конкретного листа.
Здесь представлено окно кода для Лист2 в нашей рабочей книге (у нас есть выпадающий список на этом листе).
После открытия окна кода вставьте туда следующий код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.UndoOldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & ", " & Newvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Сохраните код, а теперь попробуйте выбрать значения в выпадающем списке.
Выбрав Карандаш , мы выбираем другой элемент Блокнот И вы можете видеть, мы нашли оба предмета (изображение ниже).
Этот код позволит нам повторить выбор. Допустим, если мы выберем Карандаш снова,
мы снова найдем элемент в поле выбора.
Объяснение кода
Мы объявили две строки Oldvalue и Новая ценность .
Вы можете видеть, что мы сделали выпадающий список в D4 клетку, поэтому наш целевой адрес - это D4 Кроме того, мы перепроверили, использует ли ячейка проверку данных или нет. Target.SpecialCells .
Как только значение выбрано, мы отключили события ( Application.EnableEvents = False
), чтобы изменения не вызвали повторное событие. Затем сохраняем выбранный элемент в Новая ценность .
После отмены изменения мы установили значение в файл Oldvalue Затем проверьте Oldvalue пустое или нет. Если пустое (означает, что выбрано только одно значение), то возвращается значение Новая ценность . В противном случае, объедините Oldvalue и Новая ценность .
Перед завершением сбросьте событие, чтобы мы могли внести изменения, если потребуется.
Читать далее: Множественный зависимый выпадающий список Excel VBA
2. Выберите несколько элементов из выпадающего списка (только уникальный выбор)
В предыдущем разделе мы рассмотрели множественные выделения, где допускалось повторение. Если вы не хотите этого, то следуйте этому разделу.
Для удобства мы использовали отдельный лист для этой демонстрации. На этот раз мы находимся на Листе3. Напишите следующий код в окне кода для этого листа.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & ", " & Newvalue Else: Target.Value = Oldvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Есть ли разница по сравнению с предыдущей версией? Присмотритесь внимательнее, и вы сможете заметить небольшую разницу.
Здесь мы использовали VBA функция под названием ИНСТР . ИНСТР Функция возвращает позицию первого вхождения подстроки в строку. Для получения дополнительной информации посетите статью INSTR.
Используя эту логическую операцию с InStr(1, Oldvalue, Newvalue) = 0, мы проверили, найдены ли значения или нет. Если логическая операция возвращает значение TRUE (не найдено ранее), то это позволяет выбрать элемент и объединить с более ранним значением.
Сохраните код и теперь попробуйте выбрать элемент, который уже был выбран.
Здесь мы уже выбрали Карандаш Если мы захотим выбрать его снова, мы не сможем. Он не позволяет дублировать значения.
Читать далее: Как создать выпадающий список из другого листа в Excel
3. Выберите элементы в новой строке
До сих пор мы видели, что элементы разделяются запятой. В этом разделе мы расположим выбранные элементы в новых строках.
Для простоты мы объединяем несколько ячеек с D4 ячейку. Для этого выделите ячейки, которые вы хотите объединить, и нажмите кнопку Слияние и центр из Выравнивание раздел Главная вкладка.
Клетка будет набирать высоту.
Теперь давайте рассмотрим код для разделения элементов с помощью новой строки. Используйте следующий код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & vbNewLine & Newvalue Else: Target.Value = Oldvalue End If End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Единственное отличие от предыдущего кода заключается в том, что на этот раз мы использовали vbNewLine между OldValue и NewValue .
vbNewLine обеспечивает новую линию между элементами.
Теперь выберите элементы.
Мы выбираем предмет Ручка который показан на изображении выше. Теперь выберите другой элемент.
Вы увидите, что эти два элемента находятся в разных строках.
Здесь у нас есть два значения, которые находятся в двух разных строках. При выборе другого значения оно будет добавлено в другую строку. Каждое значение будет находиться в новой строке.
Обратите внимание, что если вам нужен другой разделитель для разделения элементов, используйте его в двойных кавычках вместо vbNewline .
Заключение
На этом сегодня все. Мы перечислили несколько способов сделать несколько вариантов выбора в раскрывающемся списке. Надеемся, что это будет вам полезно. Не стесняйтесь комментировать, если что-то покажется вам сложным для понимания. Сообщите нам о других методах, которые мы упустили.