Зміст
Залежно від обставин вам може знадобитися вибрати кілька значень у випадаючому списку. У цьому уроці ми покажемо вам, як зробити вибір декількох значень у випадаючому списку. У цьому уроці ми використовуємо 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 Go To Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then Go To Exitsub Else: If Target.Value = "" Then Go To 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 і Newvalue .
Ви можете побачити, що ми зробили випадаючий список в розділі D4 тому наша цільова адреса D4 Крім того, ми ще раз перевірили, чи використовує комірка перевірку даних, чи ні, використовуючи Target.SpecialCells .
Після того, як вибрано значення, ми відключили події ( Application.EnableEvents = False
), щоб зміни не викликали подію знову. Потім збережіть вибраний елемент в Newvalue .
Після скасування зміни ми встановили значення в Oldvalue Потім перевірте, чи є Oldvalue порожній чи ні. Якщо порожній (означає, що вибрано тільки одне значення), то повернути Newvalue В іншому випадку, об'єднайте Oldvalue і Newvalue .
Перед закінченням скидаємо подію, щоб можна було внести зміни, якщо потрібно.
Читати далі: Кілька залежних випадаючих списків 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 Go To Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then Go To Exitsub Else: If Target.Value = "" Then Go To 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 повертає позицію першого входження підрядка в рядку. Для отримання додаткової інформації відвідайте цю статтю INSTR.
З допомогою цієї логічної операції з InStr(1, Oldvalue, Newvalue) = 0 ми перевірили, чи знайдено значення чи ні. Якщо логічна операція повертає ПРАВДА (не знайдено раніше), то це дозволяє вибрати елемент і об'єднати з більш раннім значенням.
Збережіть код і тепер спробуйте вибрати елемент, який вже був обраний.
Тут ми вже відібрали Олівець Якщо ми захочемо вибрати його знову, то не зможемо, бо він не допускає дублікатів значень.
Читати далі: Як створити випадаючий список з іншого аркуша в Excel
3. виберіть Елементи в новому рядку
Наразі ми виявили, що пункти розділені комою. У цьому розділі ми розташуємо вибрані пункти з нового рядка.
Для спрощення ми об'єднуємо кілька клітинок з D4 Для цього виділіть комірки, які потрібно об'єднати, і натисніть кнопку Об'єднати & Центр від Вирівнювання розділу "Просування в Україні". Головна сторінка рахунок.
Комірка набере більшу висоту.
Тепер розглянемо код для розділення елементів через новий рядок. Використовується наступний код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error Go To Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then Go To Exitsub Else: If Target.Value = "" Then Go To 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 Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Єдина відмінність від попереднього коду полягає в тому, що цього разу ми використали vbNewLine між ними OldValue і NewValue .
vbNewLine забезпечує новий рядок між пунктами.
Тепер виберіть пункти.
Обираємо товар Ручка що показано на зображенні вище. Тепер виберіть інший елемент.
Ви побачите, що ці два пункти знаходяться в різних рядках.
Тут ми маємо два значення, які знаходяться в двох різних рядках. Вибір іншого значення додасть його в інший рядок. Кожне значення буде в новому рядку.
Зверніть увагу, що якщо ви хочете, щоб інший роздільник відокремлював елементи, використовуйте його в подвійних лапках замість vbNewline .
Висновок
На сьогодні це все. Ми перерахували кілька підходів до створення множинного вибору у випадаючому списку. Сподіваємося, ви знайдете це корисним. Не соромтеся коментувати, якщо щось здається складним для розуміння. Дайте нам знати про будь-які інші методи, які ми пропустили тут.