Cuprins
În funcție de circumstanțe, este posibil să aveți nevoie să selectați mai multe valori într-o listă derulantă. În acest tutorial, vă vom arăta cum să faceți selecția multiplă într-o listă derulantă. Pentru această sesiune, folosim Excel 2019, nu ezitați să utilizați versiunea preferată.
Înainte de a intra în sesiune, haideți să cunoaștem setul de date care stă la baza exemplelor noastre.
Aici avem mai multe elemente de papetărie, folosind aceste elemente vom crea o listă derulantă și vom selecta mai multe elemente.
Rețineți că este vorba de un set de date simplu pentru a păstra lucrurile simple. Într-un scenariu practic, este posibil să întâlniți un set de date mult mai mare și mai complex.
Caiet de practică
Vă invităm să descărcați caietul de practică de la link-ul de mai jos.
Efectuați selecția multiplă din lista derulantă.xlsm
Selecție multiplă într-o listă derulantă
Mai întâi de toate, trebuie să creăm o listă derulantă pe baza stațiilor noastre. Să o creăm rapid. Nu ezitați să vizitați articolul referitor la realizarea unei liste derulante.
În Validarea datelor selectați caseta de dialog LISTA tip de date și introduceți intervalul de celule al elementelor.
B4:B11 este intervalul care conține elementele de papetărie. Acum veți găsi lista derulantă.
Citește mai mult: Lista derulantă Excel în funcție de selecție
1. Selectați mai multe elemente (permite selecția duplicată)
O listă derulantă convențională selectează întotdeauna un singur element. Aici puteți vedea că am selectat Stilou din listă (imaginea de mai jos).
Acum, dacă selectăm un alt element, să spunem Creion
atunci aceasta va înlocui valoarea anterioară. Doar Creion va rămâne selectată.
Pentru a selecta mai multe elemente, trebuie să folosim funcția VBA Deschideți codul. Microsoft Visual Basic pentru aplicații (apăsați ALT + F11 pentru a o deschide).
Acum, faceți dublu clic pe numele sau numărul foii de lucru în care doriți să selectați mai multe elemente din lista derulantă. Veți găsi fereastra de cod pentru acea foaie anume.
Aici, este fereastra de cod pentru Foaie2 în registrul nostru de lucru (avem lista derulantă în această foaie).
După ce fereastra de cod este deschisă, introduceți acolo următorul cod
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 End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Salvați codul și acum încercați să selectați valorile din lista derulantă.
După ce a selectat Creion , vom selecta un alt element Notebook Și, după cum vedeți, am găsit ambele articole (imaginea de mai jos).
Acest cod ne va permite să repetăm selecția. Să spunem că dacă selectăm Creion din nou,
vom găsi din nou elementul în caseta de selecție.
Cod Explicație
Am declarat două șiruri de caractere Valoare veche și Newvalue .
Puteți vedea că am făcut lista derulantă în D4 de aceea adresa noastră țintă este D4 În plus, am reverificat dacă celula folosește sau nu validarea datelor folosind Target.SpecialCells .
Odată ce o valoare este selectată, am oprit evenimentele ( Application.EnableEvents = False
), astfel încât modificările să nu mai declanșeze din nou evenimentul. Apoi am stocat elementul selectat în Newvalue .
După ce am anulat modificarea, am stabilit valoarea în Valoare veche Apoi verificați dacă Valoare veche este gol sau nu. Dacă este gol (înseamnă că este selectată doar o singură valoare), atunci se returnează valoarea Newvalue În caz contrar, se concatenează Valoare veche și Newvalue .
Înainte de a încheia resetarea evenimentului, astfel încât să putem schimba dacă este necesar.
Citește mai mult: Lista derulantă cu mai multe dependențe Excel VBA
2. Selectați mai multe elemente din lista derulantă (doar selecție unică)
În secțiunea anterioară, am văzut selecțiile multiple în care a fost permisă repetarea. Dacă nu doriți acest lucru, urmați această secțiune.
Pentru comoditate, am folosit o foaie separată pentru această demonstrație. De data aceasta ne aflăm la foaia 3. Scrieți următorul cod în fereastra de cod pentru această foaie.
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 End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Există vreo diferență față de codul anterior! Uitați-vă mai atent, veți putea observa o mică diferență.
Aici am folosit un VBA funcția numită INSTR . INSTR returnează poziția primei apariții a unei subșiruri într-un șir de caractere. Vizitați acest articol INSTR pentru informații suplimentare.
Utilizând această operație logică cu InStr(1, Oldvalue, Newvalue) = 0, am verificat dacă valorile sunt sau nu găsite. Dacă operația logică returnează ADEVĂRAT (nu a fost găsit anterior), atunci permite selectarea elementului și concatenarea cu valoarea anterioară.
Salvați codul și încercați acum să selectați un element care a fost deja selectat.
Aici am selectat deja Creion Dacă vrem să o selectăm din nou, nu putem. Nu permite valori duble.
Citește mai mult: Cum să creați o listă derulantă dintr-o altă foaie în Excel
3. Selectați elementele din Newline
Până acum, am constatat că elementele sunt separate prin virgulă. În această secțiune, vom aranja elementele selectate în linii noi.
Pentru simplificare, fuzionăm câteva celule cu D4 Pentru a face acest lucru, selectați celulele pe care doriți să le unificați și faceți clic pe Îmbinare & Centru de la Aliniere din secțiunea Acasă tab.
Celula va câștiga mai multă înălțime.
Acum, să ne uităm la codul de separare a elementelor prin newline. Utilizați următorul cod
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
Singura diferență față de codul anterior este că de data aceasta am folosit vbNewLine între timp OldValue și NewValue .
vbNewLine prevede o nouă linie între elemente.
Acum selectați elementele.
Selectăm un element Stilou care apare în imaginea de mai sus. Acum selectați un alt element.
Veți constata că cele două elemente se află în linii diferite.
Aici avem două valori, care se află pe două linii diferite. Selectarea unei alte valori o va adăuga pe o altă linie. Fiecare valoare va fi pe o nouă linie.
Rețineți că, dacă doriți un alt delimitator pentru a separa elementele, utilizați-l între ghilimele duble în locul lui vbNewline .
Concluzie
Asta e tot pentru astăzi. Am enumerat mai multe abordări pentru a face selecții multiple într-o listă derulantă. Sperăm că veți găsi acest lucru util. Nu ezitați să comentați dacă ceva pare dificil de înțeles. Anunțați-ne orice alte metode pe care le-am ratat aici.